2016-07-31 2 views
0

Я пишу простую программу шифрования с C для малины Pi. Он успешно скомпилирован для моего процессора X86 с gcc encoder.c -lcrypto -o encoder (я установил libssl-dev), но когда я хочу перекрестно скомпилировать его (с помощью arm-linux-gnueabihf-gcc), эта ошибка встречаются:Ошибка при перекрестном компиляции функции openssl C

$ arm-linux-gnueabihf-gcc encoder.c -lcrypto -o encoder 
    In file included from ./encoder.c:4:0: 
    /usr/include/openssl/aes.h:55:33: fatal error: openssl/opensslconf.h: No such file or directory 
    #include <openssl/opensslconf.h> 
            ^
    compilation terminated. 

Как перекрестно скомпилировать приложение opensl C для малины Pi?

+0

Самый простой способ - это, вероятно, SSH в RPI и работать непосредственно с устройством. Учетными данными по умолчанию являются имя пользователя *** 'pi' *** и пароль ***' малина' ***. В противном случае вам нужно настроить среду оболочки для кросс-компиляции. Вам нужно поставить цепочку инструментов и заголовки на путь, и вам нужно установить некоторые переменные типа 'CROSS_COMPILE'. Оформить комментарии в сценарии [Configure] (http://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/Configure). – jww

+0

Спасибо. как вы предложили, я не могу напрямую установить пакеты armhf в систему x86. Это аналогичная проблема и обоснование: http://superuser.com/questions/1080869/how-do-download-a-debian-arm-package-from-another-computer – SAP

+0

Вам необходим прямой доступ к устройству для встроенная сборка или вам нужно перекрестно скомпилировать. Если вы не можете использовать SSH в устройстве, и вы не можете перекрестно скомпилировать с помощью соответствующей инструментальной цепочки, то вы не сможете создавать программы для устройства. – jww

ответ

0

Ваша самая большая проблема заключается в том, что ваш кросс-компилятор пытается использовать сборки (как в вашей машине x86), и он также с удовольствием попытается использовать неправильные библиотеки, если и когда дело доходит до ссылки (и, конечно,). Долгое время существует --sysroot option, который решает именно эту проблему, вам просто нужно правильно настроить sysroot для вашей целевой машины, и если у вас уже есть вероятность кросс-компилятора, у вас уже есть некоторый sysroot. Вам просто нужно знать правильные пути (в зависимости от того, где и как вы устанавливаете кросс-компилятор), компилировать и устанавливать сам openssl (кросс-компиляция openssl в неадекватном, BTW), а затем вы сможете перекрестно скомпилировать что-то, используя openssl для вашего Pi.

Как уже отмечалось в комментариях, создание устройства проще, но Pi работает медленно, поэтому есть выбор — простая настройка и медленная сборка на Pi или относительно жесткая настройка кросс-компиляции и быстрая сборка на x86 машина.

В качестве альтернативы вы можете попробовать использовать специализированные среды для сборки кросс-компиляции, такие как OpenEmbedded, BuildRoot или OpenWRT, но это также, вероятно, переполняет одну простую программу.

+0

Ты совершенно прав, дорогой Роман Химов. Я решил эту проблему, передав необходимые файлы на свой компьютер вместе с -L & -I. Вы предлагаете лучшее решение. Однако я действительно смутился. Я могу скомпилировать простой c-код с опцией --sysroot из-за пакета libc6-dev-armel-cross. Почему я не могу использовать такой кросс-пакет в этом сценарии? – SAP

+0

@SAP: Может быть, я кое-что не знаю о перекрестных инструментах Debian, никогда не использовал ничего из этого. Посмотрите [на этот вопрос] (http://stackoverflow.com/questions/17603213/cross-compilation-gcc-ignores-sysroot), возможно, это близко к вашей конкретной ситуации. –

Смежные вопросы