背景:
有一个c++工程,编译后生成动态库libc++.so。
新建一个c工程,封装上一个c++工程接口,编译后生成一个动态库libc.so。
现象:
make install后会将build里生成的libc.so和libc++.so拷贝到与build同级的lib目录中,
在lib文件夹下执行 ldd libc.so 会找不到libc++.so,
但是在build文件夹下执行 ldd libc.so就可以找到。
解决:
这跟rpath有关,rpath是so查找依赖库的路径。
可以通过readelf -d libc.so 查看RPATH
然后可以在cmakelists.txt中设置RPATH
set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
#设置RPATH
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
#设置RPATH路径
set_target_properties({PROJECT_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN/lib")