- 往往一个库可以被编译成静态库(lib*.a)也可以被编译成动态库(shared library,lib*.so),gcc 有“-shared” option.
- 在编译时如果头文件没在系统默认的地方(/usr/lib/inlude, etc.),那么需要在编译时用 -I includePath 指明头文件的位置,如果要连接的动态库没在系统默认的地方那么用 -L loadPath指明。
- 对于没在系统默认位置的动态库,在用 -L 指定load路径编译成功后,执行时还是会出现找不到库的错误,那么就需做以下几个方法之一去指定执行时的load路径:
- 设置环境变量 “LD_LIBRARY_PATH”
- 修改配置文件/etc/lib.so.conf,把动态库所在的绝对路径写入其中,一个路径一行,然后运行ldconfig -v来生效,ldconfig命令生成/etc/ld.so.cache缓存文件,链接器就是从这个文件中搜索动态库。
- 把动态库文件拷到系统默认的位置,/usr/lib或者/lib目录
- 在编译时用-rpath loadPath 写死
- ld是链接器,ldd可以看一个文件的依赖库
库的链接路径
最新推荐文章于 2024-02-27 09:02:27 发布