V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
PowerDi
V2EX  ›  C++

cmake 链接问题

  •  
  •   PowerDi · 2021-10-05 18:17:54 +08:00 · 1728 次点击
    这是一个创建于 905 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    8 条回复    2022-01-02 21:51:43 +08:00
    liuguangxuan
        1
    liuguangxuan  
       2021-10-05 21:36:08 +08:00 via Android
    读了两遍,愣是没看懂啥意思。
    leimao
        2
    leimao  
       2021-10-05 22:26:34 +08:00 via iPhone
    ldd 只看 LD_LIBRARY_PATH,没记错的话。CMake 的 link 过程的文件和目录可以自定义。
    mingl0280
        3
    mingl0280  
       2021-10-06 06:17:02 +08:00 via Android
    检查生成结果的 rpath 是否带了./
    PowerDi
        4
    PowerDi  
    OP
       2021-10-07 09:36:05 +08:00
    @mingl0280 用 cmake 的时候不怎么会设置 rpath,默认是不是都会把./添加进去的?就是有的库指定链接的时候运行前 ldd 也能找到 cmake 里显式指定的路径,但是另外一些就必须是 rpath(./)下才能找到
    PowerDi
        5
    PowerDi  
    OP
       2021-10-07 09:36:39 +08:00
    @leimao 对 现在遇到的问题是自定义的时候 有的库运行也是自定义的路径 但是有的库找不到
    leimao
        6
    leimao  
       2021-10-07 12:30:57 +08:00
    @PowerDi 加到 LD_LIBRARY_PATH 就行了。
    mingl0280
        7
    mingl0280  
       2021-10-08 09:00:16 +08:00 via Android
    @PowerDi 因为要看结果里带没带。贼坑爹。
    jackchenly
        8
    jackchenly  
       2022-01-02 21:51:43 +08:00
    ldd 没找到是因为操作系统不知道你的库在哪,可以先加到系统里 /etc/ld.so.conf
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4613 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:53 · PVG 17:53 · LAX 02:53 · JFK 05:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.