Я пришел к своему решению с помощью учебного поста на веб-сайте компании под названием Tango Controls.Хотя их инструкций может быть достаточно для некоторых, они не подходят для меня.Первая проблема заключалась в том, что он не учитывал необходимость включать / ссылаться на библиотеки (например, Python), созданные для системы host .Вторая проблема заключается в том, что он не решает проблему установки надлежащим образом - когда вы будете следовать их инструкциям, вы в конечном итоге установите некоторые исполняемые файлы и библиотеки, созданные для системы build .
Системная терминология (как определено Autoconf):
- build - машина, на которой вы компилируете код (x86_64)
- host - машина, на которой вы хотите выполнить двоичные файлы (ARM)
Вот шаги, которые я предпринял для кросс-компиляции omniORB:
- Создайте и введите каталог сборки
$ pwd
.../omniORB-4.1.6
$ mkdir build
$ cd build
Настройка среды
PATH
с включением инструментов кросс-компиляции CPPFLAGS
с включением папки ARM sysroot / include -I... / sysroot / include LDFLAGS
для включения в папку ARM sysroot / lib -L ... / sysroot / lib
Настроить
Задайте свой собственный --prefix
при необходимости и измените CC
и CXX
для вашей настройки.Вам также может понадобиться изменить настройки --build
и --host
.
$ ../configure --build=x86_64-linux-gnu --host=arm-linux-gnueabihf --prefix=.../sysroot \
CC=.../bin/arm-linux-gnueabihf-gcc \
CXX=.../bin/arm-linux-gnueabihf-g++
...
Примечание: я использую три точки (...), чтобы пропустить части пути к файлам или неважновыход.
Удалите пути включения и библиотеки из
beforeauto.mk
для сборки инструмента x86_64
$ sed -i 's#CPPFLAGS = -I.*include \$(DIR_CPPFLAGS) \$(IMPORT_CPPFLAGS)#CPPFLAGS = $(DIR_CPPFLAGS) $(IMPORT_CPPFLAGS)#' mk/beforeauto.mk
$ sed -i 's#CLINKOPTIONS = -L.*lib \$(CDEBUGFLAGS) \$(COPTIONS)#CLINKOPTIONS = $(CDEBUGFLAGS) $(COPTIONS)#' mk/beforeauto.mk
$ sed -i 's#CXXLINKOPTIONS = -L.*lib \$(CXXDEBUGFLAGS) \$(CXXOPTIONS)#CXXLINKOPTIONS = $(CXXDEBUGFLAGS) $(CXXOPTIONS)#' mk/beforeauto.mk
Эти sed
команды обобщены, но вам все равно может потребоваться изменить их дляваши собственные настройки.
Создание инструментов для системы
build Эти инструменты используются во время компиляции omniORB, поэтому их необходимо скомпилировать для системы build ,Мы заставляем make использовать системные компиляторы build с переменными CC
и CXX
. Они могут нуждаться в модификации в зависимости от имени ваших компиляторов системы сборки.Убедитесь, что эти компиляторы на вашем PATH
.
$ make CC=gcc -C src/tool/omniidl/cxx/cccp
...
$ make CXX=g++ -C src/tool/omniidl/cxx
...
$ make CC=gcc -C src/tool/omkdepend
...
Система сборки патчей -
может не потребоваться В инструкциях из поста Tango говорится о добавлении библиотеки stdc++
в некоторые команды make с помощью -l
флаг.Приведенные ниже команды sed
могут использоваться для этого патча.
$ sed -i 's/@(libs="$(CORBA_LIB_NODYN)"; $(CXXExecutable))/@(libs="$(CORBA_LIB_NODYN) -lstdc++"; $(CXXExecutable))/' ../src/appl/omniMapper/dir.mk
$ sed -i 's/@(libs="$(CORBA_LIB_NODYN)"; $(CXXExecutable))/@(libs="$(CORBA_LIB_NODYN) -lstdc++"; $(CXXExecutable))/' ../src/appl/omniNames/dir.mk
$ sed -i 's/@(libs="$(CORBA_LIB_NODYN)"; $(CXXExecutable))/@(libs="$(CORBA_LIB_NODYN) -lstdc++"; $(CXXExecutable))/' ../src/appl/utils/catior/dir.mk
$ sed -i 's/@(libs="$(CORBA_LIB_NODYN)"; $(CXXExecutable))/@(libs="$(CORBA_LIB_NODYN) -lstdc++"; $(CXXExecutable))/' ../src/appl/utils/convertior/dir.mk
$ sed -i 's/@(libs="$(CORBA_LIB_NODYN)"; $(CXXExecutable))/@(libs="$(CORBA_LIB_NODYN) -lstdc++"; $(CXXExecutable))/' ../src/appl/utils/genior/dir.mk
$ sed -i 's/@(libs="$(CORBA_LIB_NODYN)"; $(CXXExecutable))/@(libs="$(CORBA_LIB_NODYN) -lstdc++"; $(CXXExecutable))/' ../src/appl/utils/nameclt/dir.mk
Я еще не определил, необходим ли этот патч для всех систем и версий программного обеспечения.Для моей собственной установки сборка успешна с этим патчем или без него.Я обновлю этот ответ, если узнаю больше об этом патче.
Поместите пути включения и библиотеки обратно в
beforeauto.mk
для сборки ARM omniORB
Вам нужно будет указать собственные пути вместо ...
.
$ sed -i 's#CPPFLAGS = \$(DIR_CPPFLAGS) \$(IMPORT_CPPFLAGS)#CPPFLAGS = -I.../sysroot/include $(DIR_CPPFLAGS) $(IMPORT_CPPFLAGS)#' mk/beforeauto.mk
$ sed -i 's#CLINKOPTIONS = \$(CDEBUGFLAGS) \$(COPTIONS)#CLINKOPTIONS = -L.../sysroot/lib $(CDEBUGFLAGS) $(COPTIONS)#' mk/beforeauto.mk
$ sed -i 's#CXXLINKOPTIONS = \$(CXXDEBUGFLAGS) \$(CXXOPTIONS)#CXXLINKOPTIONS = -L.../sysroot/lib $(CXXDEBUGFLAGS) $(CXXOPTIONS)#' mk/beforeauto.mk
Кросс-компиляция omniORB
$ make
...
Кросс-компиляция инструментов, которые мы изначально создали для
build system
$ make -C src/tool/omniidl/cxx/cccp clean
...
$ make -C src/tool/omniidl/cxx clean
...
$ make -C src/tool/omkdepend clean
...
$ make -C src/tool/omniidl/cxx/cccp
...
$ make -C src/tool/omniidl/cxx
...
$ make -C src/tool/omkdepend
...
Установите все
$ make install
...
Мы закончили! Теперь вы сможете проверить установленные файлы с помощью команды file
и увидеть, что они собраныдля АРМ.