Настройка пути поиска библиотеки компилятора не работает - PullRequest
0 голосов
/ 05 марта 2019

Я создал собственный компилятор для aarch64.Построено было успешно.У меня проблемы, хотя, указав библиотеку glibc (libc.so) для ссылки.Я следовал предложению в этой ссылке о компиляции с несколькими glibc, но он не работает.

Среда:

  • ARM 64-битный компьютер.

  • Набор инструментов в toolchain_dir/bin/aarch64-linux-g++.

  • Каталог sysroot в toolchain/sysroot/lib, который содержит библиотеку 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 вместо toolchain/sysroot/lib, которая содержит GLIBCXX_3.4.20 (libstdc ++. So.6).

  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
...