您的位置:首页 > 运维架构 > Linux

linux下制作静态库和动态库的方法

2009-04-25 20:47 369 查看
我们都知道 *.a 代表静态库;*.so 代表动态库。那么这两个库到底怎么制作呢?

制作静态库的方法:

把代码编译为目标文件形式:

# gcc -c liberr.c -o liberr.o

使用工具ar创建一个存档文件:

# ar rcs liberr.a liberr.o

编译程序时把程序和liberr.a链接起来:

# gcc errtest.c -o errtest -static -L./ -lerr

制作动态库的方法:

首先编译目标文件:

# gcc -fPIC -g -c liberr.c -o liberr.o

然后链接库:

#gcc -g -shared -Wl,-soname,liberr.so -o liberr.so.1.0.0 liberr.o -lc

把生成的动态库liberr.so.1.0.0拷贝到/usr/lib目录里:

#cp liberr.so.1.0.0 /usr/lib

进入/usr/lib目录建立两个链接文件:

#cd /usr/lib
#ln -s liberr.so.1.0.0 liberr.so.1
#ln -s liberr.so.1.0.0 liberr.so

编译程序时和动态库链接起来:

#gcc errtest.c -o errtest -lerr

附加的常识:
编译时,标准的头文件在 /usr/include 下,系统编译时默认自动到这搜索。
若要自定义的头文件,用户可通过在命令中加 –I <库路径> 到额外指定的头文件搜索自己要包含的头文件。
而系统默认的链接库搜索路径在 /usr/lib , /lib 下,若要链接自己制定的库要在命令中加上 -l<库名> -L <库的路径>
其中:–l 指定要链接的具体库名
-L 到额外库搜索的路径
例:g++ hello.cpp –o hello –I /usr/lib/qt-3.1/include –lqt –L /usr/lib/qt-3.1/lib
解释:-lqt 代表链接 qt 库,其中qt 库在/usr/lib/qt-3.1/lib下的名是libqt.so
–L /usr/lib/qt-3.1/lib 代表路径在/usr/lib/qt-3.1/lib 下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: