最近才开始接触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.og++ -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.sog++ -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 成功!!