我已经成功地在 x86-64 机器上交叉编译了一个程序。但是,当我尝试在目标机器 sh4a 上运行时,出现以下错误:./ioq3ded.sh4a: /lib/libc.so.6: version `GLIBC_2.11' not found (required by ./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 local exec code cannot be linked into shared objects 使用我们拥有的旧版本的 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”标志应该是什么?考虑到我(2.5版本库)所在的文件夹是: ./glibc-2_5/lib64/libc.so 而且,我的制作如下: make USE_LOCAL_HEADERS=0 ARCH=sh4a CFLAGS='-fopenmp -Wall -D_GNU_SOURCE=1 -D_REENTRANT' USE_VOIP=0 BUILD_CLIENT=0 BUILD_MISSIONPACK=0