1、ubuntu 中添加编译链接库
1)gcc 中 -L -rpath_link -rpath 选项
-L : “链接”的时候,去找的目录,所有 -lFOO 选项设置的库,都会先从 -L 指定的目录去找,然后是默认的地方。
-rpath_link :指定链接时的搜索路径,运行时依赖 LD_LIBRARY_PATH。
-rpath : 指定链接时搜索路径,并且此路径生成到了可执行文件中。
2)export LD_LIBRARY_PATH
3) ldconfig
有时候,没有指定 -rpath ,也没有指定 LD_LIBRARY_PATH,可执行程序再运行时依然能找到对应的链接库,时由于ldconfig作用。
ldconfig在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态 链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.
缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.
2、gcc/g++ 编译链接静态库报未定义函数错误
一般情况是链接的静态库依赖于其它一些第三方库,需要添加这些第三方库的链接选项到当前的编译工程。
编译A ,链接静态库 B,静态库B依赖 第三方库C,A编译选项添加-lC
3、关于多版本链接错误
lcm/lib/liblcm.a(lcm_mpudpm.c.o): undefined reference to symbol 'pthread_sigmask@@GLIBC_2.2.5'
/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
如上错误,大致原因为多版本的libpthread 库造成的,错误提示未定义的'pthread_sigmask@@GLIBC_2.2.5',有两个方面,这个库是glib中的pthread,这边修改了
cmake中target_link_libraries 链接库选项切换顺序,将-lglib-2.0 选项放在与此有冲突版本的前面。
提前