静态库和动态库的创建和使用

来源:互联网 发布:rabbitmq php amqp 编辑:程序博客网 时间:2024/06/03 17:39

反汇编指令: 1. gcc x.c -g -o x; 2、objdump -S -d ./hello。-g是为了添加调试信息,objdump中的-S选项 为了在显示汇编代码的时候同时显示原来的C语言源代码程序。

静态链接库:以lib*.a(linux系统下)命名; 编译时使用,执行时可以删除;实际上就是多个.o文件的压缩包。
执行命令: ar crv lib*.a x1.o x2.o
调用命令: gcc y.c -o y -l*(链接)
动态链接库:以lib*.so(Linux系统)命名;执行时使用,不可删除;可以共享内存资源,减少内存消耗,,可以减少链接次数(补丁多以动态库发布);
执行命令: gcc -shared -fPCI -o lib*.so x1.o x2.o
调用命令: gcc y.c -o y -L. -l* (*为库名) ;-L指明库的路径,-l指明库的名称

ps:通过设置将库添加到文件可找到的位置,防止出现路径错误

linux下动态库(.so)文件默认的查找路径:/lib和/usr/lib和/usr/local/lib 里的库直接用-l参数就能链接;

程序编译连接,程序运行都需要知道动态库所在位置。"-L"参数可以指定编译连接时的库文件路径,无法提供程序运行时库文件的路径。可以采用下面方法来提供:
(方法1)使用环境变量LD_LIBRARY_PATH,命令如下:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/yangxt/demo

(方法2)将所用到的动态库文件放到/usr/lib目录下;

(方法3)可以在/usr/lib目录下创建软连接,连接到你自己目录下的动态库,命令如下:
ln -s /home/yangxt/demo/libmydyn.so /usr/lib/libmydyn.so # ln -s 源文件 目标文件
这样就在/usr/lib目录下创建了一个指向/home/yangxt/demo/libmydyn.so动态库的软连接;


(方法4)修改"vi /etc/ld.so.conf"文件,添加你自己的动态库文件路径,内容如下:
include ld.so.conf.d/*.conf
/home/yangxt/demo #你自己的动态库文件路径
添加完成之后,使用"ldconfig"重新加载配置文件使之生效。

原创粉丝点击