1.指定动态库路径
cmake
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "\${ORIGIN}/lib") #指定运行时动态库的加载路径,ORIGIN指运行文件所在目录
makefile
gcc -L选项在链接时指定动态库路径,编译通过,但是执行时会找不到路径;
gcc -Wl -rpath选项在运行时指定路径,运行时按照指定路径寻找动态库;
也就是说处理动态链接库时有2个路径:链接时路径和运行时路径,2个路径是分开的;
如:
$(CC) -o $@ $^ -L${ORIGIN}/lib -lfinger_client -Wl,-rpath=${ORIGIN}/lib
2.包含静态库所有符号
target_link_libraries(
-wl,--whole-archive
静态库
-wl,--no-whole-archive -wl,--allow-multiple-definition
)
3.编译强制连接动态库
编译没有使用到的库,让ldd显示
-wl,--no-as-needed 动态库路径