2016-12-01 2 views
2

После this howto Я выполняю кросс-компиляцию приложения bluetooth для Raspberry Pi (ARM). Когда я пытаюсь установить связь с libbluetooth, я получаю ошибку ниже. Даже самое простое приложение helloworld (без кода Bluetooth) не будет связываться.Кросс-компиляция для ARM: неопределенная ссылка на '[email protected]_2.15'

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 `[email protected]_2.15' 


[email protected] ~/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 

Edit (добавлено): GLibC Version 2.19

[email protected]:~ $ ldd --version 
ldd (Debian GLIBC 2.19-18+deb8u6) 2.19 

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

+0

Какая версия glibc? – Starl1ght

+1

@ Starl1ght GLIBC 2.19 (на RPi, где я скопировал '/ usr/*' и '/ lib/*') – SBF

+0

Но какая версия glibc является кросс-toolchain с использованием (поскольку -L не будет переопределять ее встроенный SYSROOT)? Готов поспорить, вот в чем проблема. – Notlikethat

ответ

5

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

Для решения этой проблемы я загрузил более новую версию инструментальных средств Linaro dev (6.1.1), чем то, что предоставляется хранилищем инструментов малины pi.

Here is the link to the latest linaro toolchain release

Скачать "НКУ-Линаро-6.1.1-2016.08-x86_64_arm-линукс-gnueabihf.tar.xz" и поместить эту папку в raspberrypi/инструменты/рычажного 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/

+1

Или просто используйте '--sysroot = <путь для копирования файловой системы Pi>' в используйте реальные целевые библиотеки вместо того, чтобы полагаться на те, которые упакованы с помощью cross-toolchain. – Notlikethat