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

我们都知道 *.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下

懂得接受失败的人,就是懂得人生真谛的人,

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

相关文章:

你感兴趣的文章:

标签云: