linux - 如何链接到非默认 glibc 库?

标签 linux gcc compilation cross-compiling

我已经在 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 失败,因为缺少所需的对象。 此外,我尝试静态编译程序。然而,它失败了: 至于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

最佳答案

您只需将 Glibc 文件从工具链复制到 SH4A 机器即可。

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

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

路径应该与 SH4A 目标计算机上的路径相同,而不是 x86_64 构建计算机上的路径。

关于linux - 如何链接到非默认 glibc 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13699480/

相关文章:

c - 具有更高粒度的 UNIX alarm()

c - C 中的 "UDP datagrams only"套接字

linux - 使用变量检查 FTP 状态 - Linux

c - 为什么公共(public)部分变量只出现在目标文件中而不是可执行文件中?

c++ - G++ 浮点精度

compilation - 如何使用LLVM将基于堆栈的虚拟机字节码转换为SSA形式

c - 线程中的 epoll 和哈希表

c++ - 如何以跨本地方式在 Crosstools-NG 中使用 canadian 以在 arm board 上获取 gcc?

Qt 应用程序编译失败

python - 分发嵌入 Cython 编译的代码并使其在任何机器上工作所需的最少文件集