我已成功在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本地exec代码无法链接到共享对象 使用旧版本的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版本库)。
我的问题出现了: *“制造”标志应该是什么?考虑到MY(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
答案 0 :(得分:3)
您只需将Glibc文件从工具链复制到SH4A机器即可。
如果您不想覆盖现有的libc文件,请尝试chroot
,或者,如果这对您不起作用,请将它们放在其他位置,然后将以下选项添加到link命令:
-Wl,-rpath,/path/to/alternative/lib -Wl,-dynamic-linker,/path/to/alternative/lib/ld-linux.so
路径应该与SH4A目标机器上的路径一样,而不是x86_64构建机器。