我为aarch64构建了本机编译器。建造成功。我在指定要链接的glibc(libc.so
)库时遇到了问题。我遵循了link中关于使用多个glibc进行编译的建议,但是没有用。
环境:
ARM 64位计算机。
toolchain_dir/bin/aarch64-linux-g++
中的工具链。
toolchain/sysroot/lib
中的sysroot目录,其中包含lib.so.6(glibc 2.25)和libstdc ++。so(6.0.22)库以及ld-linux-aarch64.so.1
链接器。
/lib64
目录包含旧版本的libc.so.6(glibc 2.17)和libstdc ++。so(6.0.19)。
我尝试过的事情:
我试图将一个简单程序编译为:
$aarch-64-linux-g++ file.cpp -o out \
-L/home/user/toolchain/sysroot/lib -lc -lstdc++ \
-Wl,--rpath=/home/user/toolchain/sysroot/lib \
-Wl,--dynamic-link=/home/user/toolchain/sysroot/lib/ld-linux-aarch64.so.1
但是我收到错误"/lib64/libstdc++.so.6: version GLIBCXX_3.4.20 not found"
。该错误表明rpath
不能正常运行,就像仍在查看/lib64
库一样,而不是包含GLIBCXX_3.4.20(libstdc ++。so.6)的toolchain/sysroot/lib
。
接下来,我将toolchain/sysroot/lib/libstdc++.so.6
移到/lib64
,并使用上面的相同命令再次编译,现在得到错误:"/lib64/libstdc++.so.6 version GLIBC_2.18 not defined"
。该错误表明新构建的libstdc ++。so.6试图找到新构建的glibc-2.25,但由于在/lib64
中的错误目录路径中搜索而失败。
接下来,我设置LD_LIBRARY_PATH=/home/user/toolchain/sysroot/lib
。但是在设置此变量后,我会遇到细分错误。
您是否知道为什么会这样?我该如何解决这个问题?谢谢!
编辑: 下面是来自编译器的更多信息,对于g ++ -v来说,删除了很长的一部分输出:
$aarch64-unknown-linux-gnueabi-g++ -v
Target: aarch64-unknown-linux-gnueabi
Configured with: --build=x86_64-build_pc-linux-gnu --host=aarch64-host_unknown-linux-gnueabi --target=aarch64-unknown-linux-gnueabi --enable-gold --disable-nls --disable-multilib --with-local-prefix=/home/common/userX/x-tools/HOST-aarch64-unknown-linux-gnueabi/aarch64-unknown-linux-gnueabi/aarch64-unknown-linux-gnueabi/sysroot --enable-long-long
gcc version 6.3.1 20170109 (crosstool-NG crosstool-ng-1.23.0)
$file aarch64-unknown-linux-gnueabi-g++
ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 4.10.8, stripped