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

431
07 марта 2017, 17:13

Нужна подробная инструкция по кросс-компиляции 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. Кросс-компиляция apr-1:

  1. Скачал исходники из https://apr.apache.org/download.cgi

Дальше идет описание грязного хака, но без него не получилось

  1. Разархивируем в папку apr-1.5.2_local, стандартно компилируем (под локальную машину):

    ./configure make

Внимание, не инсталим! Нам теперь понадобятся файлы из apr-1.5.2_local/tools в дальнейшем (в этом и заключается "грязный хак")

  1. Разархивируем снова в папку apr-1.5.2_arm

  2. Конфигурю с помощью следующих флагов (если кто найдет более оптимальный набор флагов, напишите коммент):

    ./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"

  3. Копируем файлы из apr-1.5.2_local/tools в apr-1.5.2_arm/tools

Пояснение: Дело в том, что в процессе make'а генерируется и выполняется бинарный файл tools/gen_test_char, а на 64-битной машине 32-битная бинарка не распознается и не выполняется. Если кто знает, как обойти это скользкое место, прошу отписаться.

  1. Выполняю make со своим набором компиляторов (кажется, тут нужен только си, без плюсов, но не помешал):

    make CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++

  2. sudo make install (заинсталил в $HOME/arm/usr)

Источник: http://ru.stackoverflow.com/questions/634989/%d0%9a%d1%80%d0%be%d1%81%d1%81%d0%ba%d0%be%d0%bc%d0%bf%d0%b8%d0%bb%d1%8f%d1%86%d0%b8%d1%8f-activemq-cpp

READ ALSO
Как создать splash screen в visual c++?

Как создать splash screen в visual c++?

Есть две формы: одна - главная рабочая область, вторая - splash screenКод такой(основные функции: таймер и конструктор главной формы):

324
Как конвертировать строку в число?

Как конвертировать строку в число?

Допустим, есть строка (string, не char) = "123455"

324
Реализация getline для своего класса string

Реализация getline для своего класса string

Здравствуйте, помогите пожалуйста, проблема в функции getline(),которая принимает 2 аргумента: Входной поток, из которого следует извлечь строку...

363
Посчитать количество единиц в числе

Посчитать количество единиц в числе

Вопрос предельно прост: надо посчитать количество единиц в двоичном представлении числа за О(1)Линии и логарифмы даже не предлагайте

467