Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Кросскомпиляция ActiveMQ-cpp

#cpp #qtcreator #cross_compiling #activemq


Нужна подробная инструкция по кросс-компиляции ActiveMQ-cpp на ubuntu 15 64bit для
ARM 32 bit. Компилятор arm-linux-gnueabihf-g++. Что кросскомпилировать прежде (необходимо
и достаточно), с какими флагами? Гоогл дает только отрывочные инструкции.

Пока имею вот это:

Конфигурация для сборки activemq-cpp из исходников:

./configure --prefix=$HOME/usr --with-sysroot=/home/rishat/olimex CXX=/usr/bin/arm-linux-gnueabihf-g++


в результате получаю:

... (много строк)
checking size of wchar_t... configure: error: in `/home/rishat/Source/activemq-cpp-library-3.9.4_arm':
configure: error: cannot compute sizeof (wchar_t)
See `config.log' for more details


Содержимое config.log по этому вопросу:

configure:17217: result: no
configure:17235: checking for wchar_t
configure:17235: /usr/bin/arm-linux-gnueabihf-g++ -c -g -O2  conftest.cpp >&5
configure:17235: $? = 0
configure:17235: /usr/bin/arm-linux-gnueabihf-g++ -c -g -O2  conftest.cpp >&5
conftest.cpp: In function 'int main()':
conftest.cpp:61:14: error: expected primary-expression before 'wchar_t'
 if (sizeof ((wchar_t)))
              ^
conftest.cpp:61:14: error: expected ')' before 'wchar_t'
conftest.cpp:62:14: error: expected ')' before ';' token
      return 0;
              ^
conftest.cpp:62:14: error: expected ')' before ';' token
configure:17235: $? = 1
configure: failed program was:
| /* confdefs.h */


Все необходимые пакеты устанавливал "нормальным" способом:

sudo apt-get install autoconf
sudo apt-get install libtool-bin
sudo apt-get install libcppunit-dev 
sudo apt-get install libapr1-dev


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

Исходники activemq-cpp: http://activemq.apache.org/cms/download.html

Исходники apr: https://apr.apache.org/download.cgi


    


Ответы

Ответ 1



Шаг 1. Кросс-компиляция apr-1: Скачал исходники из https://apr.apache.org/download.cgi Дальше идет описание грязного хака, но без него не получилось Разархивируем в папку apr-1.5.2_local, стандартно компилируем (под локальную машину): ./configure make Внимание, не инсталим! Нам теперь понадобятся файлы из apr-1.5.2_local/tools в дальнейшем (в этом и заключается "грязный хак") Разархивируем снова в папку apr-1.5.2_arm Конфигурю с помощью следующих флагов (если кто найдет более оптимальный набор флагов, напишите коммент): ./configure --prefix=$HOME/arm/usr --with-sysroot=$HOME/olimex --build=x86_64-pc-linux-gnu --host=arm-linux CPPFLAGS=-I$HOME/arm/usr/include LDFLAGS=-L$HOME/arm/usr/lib CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ \ ac_cv_file__dev_zero="yes" \ ac_cv_func_setpgrp_void="yes" \ apr_cv_process_shared_works="yes" \ apr_cv_mutex_robust_shared="no" \ apr_cv_tcp_nodelay_with_cork="yes" \ ac_cv_sizeof_struct_iovec="8" \ apr_cv_mutex_recursive="yes" Копируем файлы из apr-1.5.2_local/tools в apr-1.5.2_arm/tools Пояснение: Дело в том, что в процессе make'а генерируется и выполняется бинарный файл tools/gen_test_char, а на 64-битной машине 32-битная бинарка не распознается и не выполняется. Если кто знает, как обойти это скользкое место, прошу отписаться. Выполняю make со своим набором компиляторов (кажется, тут нужен только си, без плюсов, но не помешал): make CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ sudo make install (заинсталил в $HOME/arm/usr) С помощью этого пока удалось кросскомпилировать ActiveMQ без поддержки openssl следующей конфигурацией: ./configure --prefix=$HOME/arm/usr --with-sysroot=$HOME/olimex --host=arm-linux --with-apr=$HOME/arm/usr CPPFLAGS=-I$HOME/arm/usr/include LDFLAGS=-L$HOME/arm/usr/lib CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ CFLAGS=-pthread LDFLAGS=-lpthread LDFLAGS=-L$HOME/arm/usr/lib -disable-ssl

Комментариев нет:

Отправить комментарий