设置编译器库搜索路径不起作用

时间:2019-03-05 16:12:17

标签: c++ linker g++ cross-compiling toolchain

我为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)。

我尝试过的事情:

  1. 我试图将一个简单程序编译为:

    $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

  2. 接下来,我将toolchain/sysroot/lib/libstdc++.so.6移到/lib64,并使用上面的相同命令再次编译,现在得到错误:"/lib64/libstdc++.so.6 version GLIBC_2.18 not defined"。该错误表明新构建的libstdc ++。so.6试图找到新构建的glibc-2.25,但由于在/lib64中的错误目录路径中搜索而失败。

  3. 接下来,我设置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

0 个答案:

没有答案