cmake 链接问题

2021-10-05 18:17:54 +08:00
 PowerDi

一直疑惑一个事情,cmake 在编译依赖库的时候有一些动态库的链接会出现不同的情况

链接库的方式都是通过指定链接库的在工程目录里的路径,编译时没有问题说明库的摆放位置是能搜索到的,但是运行时会有两种情况

  1. 一些依赖库如 opencv 或者常见的三方库,用上述方法链接生成的 so 库通过 ldd 是能够将编译时的路径都找到的(与生成的 so 不在同一文件夹)
  2. 另外一些依赖库如 protobuf yaml 等等,用上述方法链接生成 so 库,ldd 时却找不到 protobuf yaml 的依赖库或者指向系统路径

这样的区别是什么呢?来源于使用方法还是三方库的生成方法

1879 次点击
所在节点    C++
8 条回复
liuguangxuan
2021-10-05 21:36:08 +08:00
读了两遍,愣是没看懂啥意思。
leimao
2021-10-05 22:26:34 +08:00
ldd 只看 LD_LIBRARY_PATH,没记错的话。CMake 的 link 过程的文件和目录可以自定义。
mingl0280
2021-10-06 06:17:02 +08:00
检查生成结果的 rpath 是否带了./
PowerDi
2021-10-07 09:36:05 +08:00
@mingl0280 用 cmake 的时候不怎么会设置 rpath,默认是不是都会把./添加进去的?就是有的库指定链接的时候运行前 ldd 也能找到 cmake 里显式指定的路径,但是另外一些就必须是 rpath(./)下才能找到
PowerDi
2021-10-07 09:36:39 +08:00
@leimao 对 现在遇到的问题是自定义的时候 有的库运行也是自定义的路径 但是有的库找不到
leimao
2021-10-07 12:30:57 +08:00
@PowerDi 加到 LD_LIBRARY_PATH 就行了。
mingl0280
2021-10-08 09:00:16 +08:00
@PowerDi 因为要看结果里带没带。贼坑爹。
jackchenly
2022-01-02 21:51:43 +08:00
ldd 没找到是因为操作系统不知道你的库在哪,可以先加到系统里 /etc/ld.so.conf

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/805978

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX