PowerDi
V2EX  ›  C++

cmake 链接问题

  •  
  •   PowerDi · Oct 5, 2021 · 2950 views
    This topic created in 1854 days ago, the information mentioned may be changed or developed.

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

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

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

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

    8 replies  •  2022-01-02 21:51:43 +08:00
    liuguangxuan
    liuguangxuan
    Oct 5, 2021 via Android
    1
    读了两遍,愣是没看懂啥意思。
    leimao
    leimao
    Oct 5, 2021 via iPhone
    2
    ldd 只看 LD_LIBRARY_PATH,没记错的话。CMake 的 link 过程的文件和目录可以自定义。
    mingl0280
    mingl0280
    Oct 6, 2021 via Android
    3
    检查生成结果的 rpath 是否带了./
    PowerDi
    PowerDi
    OP
    Oct 7, 2021
    4
    @mingl0280 用 cmake 的时候不怎么会设置 rpath,默认是不是都会把./添加进去的?就是有的库指定链接的时候运行前 ldd 也能找到 cmake 里显式指定的路径,但是另外一些就必须是 rpath(./)下才能找到
    PowerDi
    PowerDi
    OP
    Oct 7, 2021
    5
    @leimao 对 现在遇到的问题是自定义的时候 有的库运行也是自定义的路径 但是有的库找不到
    leimao
    leimao
    Oct 7, 2021
    6
    @PowerDi 加到 LD_LIBRARY_PATH 就行了。
    mingl0280
    mingl0280
    Oct 8, 2021 via Android
    7
    @PowerDi 因为要看结果里带没带。贼坑爹。
    jackchenly
    jackchenly
    Jan 2, 2022
    8
    ldd 没找到是因为操作系统不知道你的库在哪,可以先加到系统里 /etc/ld.so.conf
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1248 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 21:45 · PVG 05:45 · LAX 13:45 · JFK 16:45
    ♥ Do have faith in what you're doing.