Linux的.a、.so和.o文件

  1. .o 是中间结果,对应每个.c文件,对每个.c文件进行到汇编阶段,不链接
  2. 好多个.o文件合在一起,构成一个.a文件
  3. .a文件时静态库,.so文件时动态库
  4. 使用ar(archiver)命令生成.a,ar rcs mylib.a f1.o f2.o
  5. 用gcc生成可执行代码时,使用-l参数指定要加入的库函数。也可以用ld命令的-l和-L参数
  6. lib+函数库名+.so+版本号信息(但是记住,非常底层的C库函数都不是以lib开头命名的)。例子:/usr/lib/libreadline.so.3
    a. 编译器编译的时候需要的函数库的名字就是不包含版本号信息的soname,例如上面的例子把最后的.3去掉就可以了
  7. 共享函数库文件必须放在特定目录,对于开放源码来说,GNU标准建议所有的函数库文件都放在/usr/local/lib目录下,而且建议命令、可执行程序都放在/usr/local/bin目录下。不过这个只是习惯啦,可以改变,具体的位置信息可以看/etc/ld.so.conf里面的配置信息。当然,也可以修改这个文件,加入自己的一些特殊的路径要求。

编译相关

  1. 编译的最小单元是.c文件,首先将.c文件编译成.o
  2. 使用-c选项可告诉编译器只进行汇编生成.o,而不进行链接
  3. -fPIC,生成动态库时使用,告诉编译器生成与位置无关的的代码。即符号的地址都是绝对地址。PIC,Position Independent Code。
  4. 如何找到新生成的动态库
    a) 把库拷贝到/usr/lib和/lib下
    b) LD_LIBRARY_PATH环境变量加上库的位置
    c) 修改/etc/ld.so.conf文件,把库所在的路径加到文件末尾(直接写在文件末尾,不要在路径前加include),并执行ldconfig刷新(ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.)。这样,加入的目录下的所有库文件都可见
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值