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

cmake 链接问题

  •  
  •   PowerDi · 58 天前 · 1019 次点击
    这是一个创建于 58 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    7 条回复    2021-10-08 09:00:16 +08:00
    liuguangxuan
        1
    liuguangxuan  
       58 天前 via Android
    读了两遍,愣是没看懂啥意思。
    leimao
        2
    leimao  
       58 天前 via iPhone
    ldd 只看 LD_LIBRARY_PATH,没记错的话。CMake 的 link 过程的文件和目录可以自定义。
    mingl0280
        3
    mingl0280  
       58 天前 via Android
    检查生成结果的 rpath 是否带了./
    PowerDi
        4
    PowerDi  
    OP
       57 天前
    @mingl0280 用 cmake 的时候不怎么会设置 rpath,默认是不是都会把./添加进去的?就是有的库指定链接的时候运行前 ldd 也能找到 cmake 里显式指定的路径,但是另外一些就必须是 rpath(./)下才能找到
    PowerDi
        5
    PowerDi  
    OP
       57 天前
    @leimao 对 现在遇到的问题是自定义的时候 有的库运行也是自定义的路径 但是有的库找不到
    leimao
        6
    leimao  
       56 天前
    @PowerDi 加到 LD_LIBRARY_PATH 就行了。
    mingl0280
        7
    mingl0280  
       56 天前 via Android
    @PowerDi 因为要看结果里带没带。贼坑爹。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4012 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:14 · PVG 11:14 · LAX 19:14 · JFK 22:14
    ♥ Do have faith in what you're doing.