【问题标题】:Link against non-default glibc链接到非默认 glibc
【发布时间】:2014-07-01 22:05:32
【问题描述】:

我正在尝试链接 Andi Kleen's glibc implementation 以启用具有 pthread 的程序的锁定省略。 我将我的程序链接如下:

g++ \
-Wl,--rpath=/path/glibc-elision/build/lib \
-Wl,--dynamic-linker=/path/glibc-elision/build/lib/ld-linux-x86-64.so.2 \
-o program program.o \
-fgnu-tm -mrtm -pthread \
-Wl,--no-as-needed --enable-lock-elision=yes

只要我不使用 libstdc++ 的任何组件,一切正常。

但是尽快,例如引用了std::vector,动态链接器找不到libstdc++.so.6 (error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory)。

为了解决这个错误,我尝试为自定义和标准 glibc 提供-Wl,--rpath=/path/glibc-elision/build/lib;/usr/lib/x86_64-linux-gnu/libstdc++.so.6。 这不是正确的调用,但想法是以某种方式提供这两个库。

所以问题是:

如何将程序链接到两个 glibcs​​ 的不同组件?

我正在使用 gcc (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 开发 Ubuntu 13.10。

【问题讨论】:

  • 这听起来就像您的新 ld-linux-x86-64.so.2 找不到 C++ 运行时...作为快速检查,您可以尝试设置环境变量 LD_LIBRARY_PATH/usr/lib64
  • 是的,这似乎是正确的方法:我收到的错误不是libstdc++.so.6,而是找不到libgcc_s.so.1(这表明找到了libstdc++.so.6)。跨度>

标签: c++ c glibc


【解决方案1】:

感谢Nemo's comment,可以通过将 C++ 运行时附加到 rpath 来解决该问题。就我而言,那是

-Wl,--rpath=/path/glibc-elision/build/lib:/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu

也可以使用export LD_LIBRARY_PATH=/your/path 设置路径。

事实证明,我错误地使用了; 而不是: 来附加原始帖子中的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多