zoukankan      html  css  js  c++  java
  • -L、-rpath和-rpath-link的区别

    链接器ld的选项有 -L,-rpath 和 -rpath-link,看了下 man ld,大致是这个意思:

    -L::  “链接”的时候去找的目录,也就是所有的 -lFOO 选项里的库,都会先从 -L 指定的目录去找,然后是默认的地方。

    编译时的-L选项并不影响环境变量LD_LIBRARY_PATH,-L只是指定了程序编译连接时库的路径,并不影响程序执行时库的路径,

    系统还是会到默认路径下查找该程序所需要的库,如果找不到,还是会报错,类似cannot open shared object file。

    -rpath-link: 这个也是用于“链接”的时候的,例如你显示指定的需要 FOO.so,但是 FOO.so 本身是需要 BAR.so 的,

    后者你并没有指定,而是 FOO.so 引用到它,这个时候,会先从 -rpath-link 给的路径里找。

    -rpath:  “运行”的时候去找的目录。运行的时候,要找 .so 文件,会从这个选项里指定的地方去找。

    对于交叉编译,交叉编译链接器需已经配置 –with-sysroot 选项才能起作用。也就是说,-rpath指定的路径

    会被记录在生成的可执行程序中,用于运行时查找需要加载的动态库。-rpath-link 则只用于链接时查找。

    在gcc中使用ld链接选项时,需要在选项前面加上前缀-Wl (是字母l,不是1),以区别不是编译器的选项

    export COMM_LIB = 
            -Wl,--rpath-link $(LIB_PATH_BASE)
            -Wl,--rpath-link $(LIB_PATH_CC_BASE)
            -L$(LIB_PATH_BASE)
            -L$(LIB_PATH_CC_BASE)
            -lpthread
  • 相关阅读:
    题解 P4111 [HEOI2015]小 Z 的房间
    题解 P3317 [SDOI2014]重建
    题解 P4336 [SHOI2016]黑暗前的幻想乡
    NOIP 模拟 7 考试总结
    NOIP 模拟 7 回家
    NOIP 模拟 7 寿司
    MySQL: 多表查询
    MySQL:设计演员与角色表(多对多)
    MySQL:设计省&市表 (一对多)
    MySQL:多表关系设计(一对多 / 多对多 / 一对一)
  • 原文地址:https://www.cnblogs.com/pjl1119/p/9798892.html
Copyright © 2011-2022 走看看