【问题标题】:How do I link to a non-default glibc library?如何链接到非默认 glibc 库?
【发布时间】:2012-12-04 09:17:17
【问题描述】:

我已经成功地在 x86-64 机器上交叉编译了一个程序。但是,当我尝试在目标机器 sh4a 上运行时,出现以下错误: ./ioq3ded.sh4a: /lib/libc.so.6: 找不到版本“GLIBC_2.11”(./ioq3ded.sh4a 要求)

两台机器的详细信息如下: 编译机 架构:x86-64 LIBC 版本:2.11

执行机 架构:sh4a LIBC 版本:2.5

编程语言是 C

因此,作为解决方案,我尝试在 sh4a 机器上编译 2.11 LIBC 库。但是失败了,因为sh4a机器上的GCC编译器太老了,我没有权限,也没有升级GCC的可能。 此外,作为替代解决方案,我尝试在 x86-64 上编译 2.5 LIBC 库,以便在交叉编译期间链接到它们。但是,./configure 失败了,因为缺少必需的对象。 此外,我试图 -static 编译程序。但是,它失败了: 至于ioquake3,我尝试静态构建它: /bin/ld: /r/home7/usr/lib/libc.a(dl-tsd.o): TLS本地执行代码不能链接到共享对象 用我们拥有的旧版本的 gcc 静态构建它似乎是不可能的。 我查了这个问题: https://bugs.gentoo.org/show_bug.cgi?id=122665

此外,我从网上下载了适用于 x86-64 的 LIBC 2.5: http://rpm.pbone.net/index.php3/stat/4/idpl/12884473/dir/startcom_5/com/glibc-2.5-34.x86_64.rpm.html[^]

但是,我似乎找不到正确的编译标志,以便它链接到我的特定(2.5 版本库)而不是系统的(2.11 版本库)。

我的问题来了: * “make”标志应该是什么?考虑到 MY(2.5 版本库)所在的文件夹是: ./glibc-2_5/lib64/libc.so 而且,我的品牌如下: 使 USE_LOCAL_HEADERS=0 ARCH=sh4a CFLAGS='-fopenmp -Wall -D_GNU_SOURCE=1 -D_REENTRANT' USE_VOIP=0 BUILD_CLIENT=0 BUILD_MISSIONPACK=0

【问题讨论】:

    标签: linux gcc compilation cross-compiling


    【解决方案1】:

    您可以简单地将 Glibc 文件从工具链复制到 SH4A 机器中。

    如果您不想覆盖现有的 libc 文件,请尝试 chroot,或者,如果这对您不起作用,请将它们放在其他位置,然后将以下选项添加到您的链接命令:

    -Wl,-rpath,/path/to/alternative/lib -Wl,-dynamic-linker,/path/to/alternative/lib/ld-linux.so
    

    路径应该在 SH4A 目标机器上,而不是 x86_64 构建机器上。

    【讨论】:

    • 感谢您的热情回复!添加您友好指示的选项后,我的 sh4a 机器上出现以下错误:“ld-linux.so:错误的 ELF 解释器:没有这样的文件或目录”。我试图用谷歌搜索解决方案,但一切都如此无关紧要。
    • 我的 make 是这样的:不构建 sh4a 版本 make USE_LOCAL_HEADERS=0 CFLAGS='-fopenmp -Wall -D_GNU_SOURCE=1 -D_REENTRANT -Wl,-rpath,/home/yasir/fromgunmar /lib -Wl,-dynamic-linker,/home/yasir/fromgunmar/lib/ld-linux.so' USE_VOIP=0 BUILD_CLIENT=0 BUILD_MISSIONPACK=0 BUILD_GAME_QVM=0
    • 我也这样做了,得到了一个非交叉编译的版本:make USE_LOCAL_HEADERS=0 CFLAGS='-fopenmp -Wall -D_GNU_SOURCE=1 -D_REENTRANT' FLAGS+= -Wl,-rpath,/ home/yasir/fromgunmar/lib -Wl,-dynamic-linker,/home/yasir/fromgunmar/lib/ld-linux.so USE_VOIP=0 BUILD_CLIENT=0 BUILD_MISSIONPACK=0 BUILD_GAME_QVM=0
    • 我不知道你的构建系统,但链接器标志通常会进入LDFLAGS,而不是CFLAGS/path/to/dynamic/linker 应该是目标上的路径,而不是主机上的路径。
    • 你的 SH4A 工具链是从哪里得到的?
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2012-03-07
    • 2010-10-01
    • 2012-07-13
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多