#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
Комментариев нет:
Отправить комментарий