Nano Hash - криптовалюты, майнинг, программирование

Кросс-компиляция для ARM: неопределенная ссылка на '__fdelt_chk@GLIBC_2.15'

Следуя этому руководству, я кросс-компилирую приложение Bluetooth для Raspberry Pi (ARM) . Когда я пытаюсь установить связь с libbluetooth, я получаю следующую ошибку. Даже самое простое приложение helloworld (без кода bluetooth) не свяжется.

arm-linux-gnueabihf-g++ -c hello.cpp -o hello.o
arm-linux-gnueabihf-g++ hello.o -o hello -lbluetooth -L/home/sbf/raspberrypi/rootfs/usr/lib/arm-linux-gnueabihf
/home/sbf/raspberrypi/rootfs/usr/lib/arm-linux-gnueabihf/libbluetooth.so: undefined reference to `__fdelt_chk@GLIBC_2.15'


sbf@sbf-VirtualBox ~/raspberrypi/projects/test $ ls -al /home/sbf/raspberrypi/rootfs/usr/lib/arm-linux-gnueabihf/libbluetooth*
-rw-r--r-- 1 sbf sbf 132886 May 27  2016 /home/sbf/raspberrypi/rootfs/usr/lib/arm-linux-gnueabihf/libbluetooth.a
lrwxrwxrwx 1 sbf sbf     23 Nov 24 21:20 /home/sbf/raspberrypi/rootfs/usr/lib/arm-linux-gnueabihf/libbluetooth.so -> libbluetooth.so.3.17.11
lrwxrwxrwx 1 sbf sbf     23 Nov 24 21:20 /home/sbf/raspberrypi/rootfs/usr/lib/arm-linux-gnueabihf/libbluetooth.so.3 -> libbluetooth.so.3.17.11
-rw-r--r-- 1 sbf sbf 103376 May 27  2016 /home/sbf/raspberrypi/rootfs/usr/lib/arm-linux-gnueabihf/libbluetooth.so.3.17.11

Изменить (добавлено): GLIBC Версия 2.19

pi@raspberrypi:~ $ ldd --version
ldd (Debian GLIBC 2.19-18+deb8u6) 2.19

Что происходит не так?


  • Какая версия glibc? 01.12.2016
  • @ Starl1ght GLIBC 2.19 (на RPi, откуда я скопировал /usr/* и /lib/*) 01.12.2016
  • Но какую версию glibc использует кросс-тулчейн (поскольку -L не переопределяет встроенный sysroot)? Бьюсь об заклад, проблема именно в этом. 01.12.2016
  • @Notlikethat Как мне найти версию glibc? arm-linux-gnueabihf-ldd --version показывает мне ldd (crosstool-NG) linaro-1.13.1-4.8-2014.01 01.12.2016

Ответы:


1

Вчера я столкнулся с той же проблемой, пытаясь связать libbluetooth с помощью инструментов Raspberry Pi.

Чтобы решить эту проблему, я загрузил более новую версию инструментов разработки Linaro (6.1.1), чем та, которая поставляется в репозитории инструментов Raspberry Pi.

Вот ссылка на последнюю версию набора инструментов linaro

Загрузите «gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabihf.tar.xz» и поместите эту папку в каталог raspberrypi/tools/arm-bcm2708/ вместе с другими наборами инструментов.

Затем установите пути компилятора/компоновщика так, чтобы они указывали на новый каталог.

(Я использую cmake)

SET(CMAKE_C_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc) SET(CMAKE_CXX_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)

(редактировать) У меня возникли проблемы с запуском моего исполняемого файла с этой версией цепочки инструментов, скомпилированной, поскольку jessie не поддерживает версии gcc 5 или 6. Вместо этого попробуйте использовать этот выпуск https://releases.linaro.org/components/toolchain/binaries/4.9-2016.02/arm-linux-gnueabihf/

01.12.2016
  • Или просто используйте --sysroot=<path to copy of Pi filesystem>, чтобы использовать настоящие целевые библиотеки вместо того, чтобы полагаться на библиотеки, упакованные с кросс-тулчейном. 02.12.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..