cmake编译生成的so动态库后,无法找到依赖的第三方so, ldd not found

背景:

有一个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

扫描二维码关注公众号,回复: 12700684 查看本文章

然后可以在cmakelists.txt中设置RPATH

set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")

参考https://www.cnblogs.com/rickyk/p/3884257.html

猜你喜欢

转载自blog.csdn.net/ynshi57/article/details/107820354
ldd