【问题标题】:GNU linker ld - linking against a library at a specific locationGNU 链接器 ld - 链接到特定位置的库
【发布时间】:2018-01-19 15:05:58
【问题描述】:

假设我有这 2 个具有 相同 名称的库,/usr/local/lib/libxxx.so/opt/lib/libxxx.so/usr/local/lib//opt/lib 必须在搜索路径上(链接器才能找到其他所需的库)。应该为链接器指定什么(ldnot ld.so),以便它找到正确的位于/opt/lib/ 下的链接器?

添加于 2018-01-23 21:17 (UTC+8)

是的,这也是我的理解,尽管我不完全理解“所有 -L 选项都适用于所有 -l 选项,无论选项出现的顺序如何”的含义。

这里是详细信息。 configure 脚本创建的链接选项(抱歉有点难读)是

-lz -Wl,-rpath,/opt/moose/tbb44_20150728/lib -L/opt/moose/tbb44_20150728/lib -ltbb -ltbbmalloc -L/opt/moose/petsc-3.7.6/mpich-3.2_gcc-7.2.0-opt/lib -Wl,-rpath,/opt/moose/petsc-3.7.6/mpich-3.2_gcc-7.2.0-opt/lib -L/opt/moose/mpich-3.2/gcc-7.2.0/lib -L/opt/moose/gcc-7.2.0/lib/gcc/x86_64-pc-linux-gnu/7.2.0 -L/opt/moose/gcc-7.2.0/lib64 -L/opt/moose/gcc-7.2.0/lib -lpetsc -lsuperlu_dist -lcmumps -ldmumps -lsmumps -lzmumps -lmumps_common -lpord -lparmetis -lmetis -lHYPRE -lscalapack -lflapack -lfblas -lX11 -lmpifort -lgfortran -lquadmath -lmpicxx -lstdc++ -lm -Wl,-rpath,/opt/moose/gcc-7.2.0/lib/gcc/x86_64-pc-linux-gnu/7.2.0 -Wl,-rpath,/opt/moose/gcc-7.2.0/lib64 -Wl,-rpath,/opt/moose/gcc-7.2.0/lib -Wl,-rpath,/opt/moose/mpich-3.2/gcc-7.2.0/lib -lmpi -lgomp -lgcc_s -lpthread -ldl -L/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu -Wl,-rpath,/lib/x86_64-linux-gnu -Wl,-rpath,/usr/lib/x86_64-linux-gnu

这是链接器在链接测试二进制文件时尝试查找 libmetis.so 时的错误消息

/usr/bin/ld: gk_cur_jbufs: TLS definition in /usr/lib/x86_64-linux-gnu/libmetis.so.5 section .tdata mismatches non-TLS definition in /opt/moose/petsc-3.7.6/mpich-3.2_gcc-7.2.0-opt/lib/libmetis.so section .data /usr/lib/x86_64-linux-gnu/libmetis.so.5: error adding symbols: Bad value collect2: error: ld returned 1 exit status Makefile:1368: recipe for target 'unit_tests-dbg' failed

根据搜索顺序,我不明白为什么它试图在/opt/moose/petsc-3.7.6/mpich-3.2_gcc-7.2.0-opt/lib/usr/lib/x86_64-linux-gnu 两个搜索路径中查找它。

【问题讨论】:

    标签: gcc linker


    【解决方案1】:

    使用-L /opt/lib -L /usr/local/lib,按照这个顺序,所以首先搜索/opt/lib。

    文档说:

    -L 搜索目录 将路径 searchdir 添加到 ld 将搜索的路径列表中 存档库和 ld 控制脚本。您可以使用此选项 次数。目录按以下顺序搜索 它们是在命令行上指定的。命令行指定的目录在默认目录之前搜索 目录。

    【讨论】:

    • 我已经编辑了我的问题以提供更多详细信息。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2018-08-12
    • 2018-11-09
    • 2023-03-11
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多