Sunshine Alike

半完美主义

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  35 Posts :: 1 Stories :: 56 Comments :: 0 Trackbacks

常用链接

留言簿(15)

积分与排名

  • 积分 - 49576
  • 排名 - 451

最新随笔

最新评论

最近才开始接触linux系统(Ubuntu 9.10),有些东西容易忘记,备忘之,待续。

1.g++编译问题
//main.cpp
#include <iostream>
using namespace std;

//headers
void show();

int main()
{

    cout
<<"library test function show(): ";
    show();
    
return 0;
}

//libtest.cpp
#include <iostream>
using namespace std;

void show()
{
    cout
<<"hello library test!"<<endl;
}

静态库
首先编译libtest.cpp生成中间文件 libtest.o
g++ -c libtest.cpp
然后将其打包成静态库 staticlib.a
ar -rc staticlib.a libtest.o
最后使用静态库与main.cpp进行编译得到执行文件staticlib
g++ -o staticlib main.cpp staticlib.a
运行./staticlib 成功!!

动态库:
首先同样需要编译生成中间文件libteset.o,但一般加上-fPIC选项。
其意思是位置独立代码 ,指示编译程序生成的代码要适合共享库的内容这样的代码能够根据载入内存的位置计算内部地址
g++ -c -fPIC libtest.cpp
然后打包 生成动态库dynamiclib.so
g++ -shared libtest.o -o dynamiclib.so
最后生成可执行文件dynamiclib
g++ -o dynamic main.cpp dynamiclib.so
运行./dynamiclib 结果出错了,提示找不到动态库。
原因是linux下动态库不像windows里那样会自动寻找当前目录下的dll,这需要把编译出来的动态库放到系统的 /usr/lib 或 /lib下才能运行程序。
或者还可以在编译的时候就指定路径也可以,例如在最后一步的时候:
g++ -o dynamic main.cpp ./dynamiclib.so
再次运行./dynamiclib 成功!!
posted on 2010-03-14 21:06 Sunshine Alike 阅读(331) 评论(0)  编辑 收藏 引用 所属分类: C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理