Я хочу кросс-компилировать библиотеку crypto++ для развертывания на beaglebone под управлением Debian. На моем хост-компьютере установлена Ubuntu 14.04 LTS в 64-битной конфигурации.
Я сталкиваюсь со следующей проблемой, когда вызываю команду make из eclipse
arm-linux-gnueabihf-g++-4.8 -L/usr/include/cryptopp -o "GCMwithAES" ./main.o -lcryptopp
/usr/lib/../lib/libcryptopp.so: file not recognized: File format not recognized
Я предполагаю, что поскольку компилятор настроен для armhf, он не может распознать библиотеку, скомпилированную для amd64.
Я успешно перекрестно скомпилировал и запустил стандартные (т.е. без внешних библиотек) программы с моего хост-компьютера на целевое устройство.
Решения, которые я пробовал
- Использованы пакеты libcrypto++ с архитектурой, указанной как
armhf
, как это сделано в multiarch. Библиотеки armhf устанавливаются (согласно apt), но я не могу включить и связать с ними свой код. - Попробуйте вручную скомпилировать библиотеку в соответствии с инструкциями, приведенными в этой вики. Однако я всегда сталкиваюсь с ошибками всякий раз, когда пытаюсь скомпилировать библиотеку.
Как мне установить библиотеки libcryptopp для архитектуры armhf на мой компьютер с архитектурой x64, чтобы я мог выполнять кросс-компиляцию? или есть другой способ решить эту проблему.
Изменить
Как было предложено в ответе ниже, я опробовал предложенный метод. Я немного модифицировал скрипт setenv-embed.sh
, так как у меня был gcc-4.8
вместо gcc-4.7
. Результаты работы скрипта
CPP: /usr/bin/arm-linux-gnueabihf-cpp
CXX: /usr/bin/arm-linux-gnueabihf-g++
AR: /usr/bin/arm-linux-gnueabihf-ar
LD: /usr/bin/arm-linux-gnueabihf-ld
RANLIB: /usr/bin/arm-linux-gnueabihf-gcc-ranlib-4.8
ARM_EMBEDDED_TOOLCHAIN: /usr/bin
ARM_EMBEDDED_CXX_HEADERS: /usr/arm-linux-gnueabihf/include/c++/4.8.2
ARM_EMBEDDED_FLAGS: -march=armv7-a mfloat-abi=hard -mfpu=neon -I/usr/arm-linux-gnueabihf/include/c++/4.8.2 -I/usr/arm-linux-gnueabihf/include/c++/4.8.2/arm-linux-gnueabihf
ARM_EMBEDDED_SYSROOT: /usr/arm-linux-gnueabihf
Я собираю библиотеку с помощью команды make и сталкиваюсь со следующей ошибкой.
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: cannot find /usr/arm-linux-gnueabihf/lib/libc.so.6 inside /usr/arm-linux-gnueabihf
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: cannot find /usr/arm-linux-gnueabihf/lib/libc_nonshared.a inside /usr/arm-linux-gnueabihf
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: cannot find /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 inside /usr/arm-linux-gnueabihf
Но когда я открываю местоположение /usr/arm-linux-gnueabihf/lib
, я могу найти все три файла ошибок, упомянутые выше, то есть libc.so.6
, libc_nonshared.a
и ld-linux-armhf.so.3
.
Согласно предложениям @jww, я переношу это на новый вопрос, так как у меня проблемы со связью. Мои результаты здесь оставлены для полноты.
apt-get install arm-linux-gnueabihf-gcc arm-linux-gnueabihf-g++
- person user3079474   schedule 03.08.2015setenv-*.sh
. Я пинаю себя под зад, потому что давно должен был понять, что это необходимо. - person jww   schedule 14.06.2016