#c #cmake #cross-compiling
#c #cmake #перекрестная компиляция
Вопрос:
Я работаю в системе связи робота. Эта система работает на Ubuntu. Чтобы получить рабочее сообщение, мне нужно установить пакет debian, который устанавливает библиотеку с общими объектами. Я хочу, чтобы это работало на ARM-устройстве. Я не могу установить debian-package на ARM-устройство. Я подумываю о попытке перекрестной компиляции двоичного файла. Проблема в том, что это зависит от двоичных файлов для x86-64. Есть ли какой-нибудь способ заставить исполняемый файл работать на ARM-устройстве?
Для компиляции я использую файл cmake, который выглядит следующим образом (без перекрестной компиляции):
cmake_minimum_required(VERSION 2.8)
project(dummy_service)
find_package(XXX)
include_directories(${XXX_INCLUDE_DIR})
link_directories(${XXX_LIBRARY_DIR})
XXX_message_library(
TARGET XXX_messages
DIRECTORY msg
STATIC)
add_executable(dummy_service src/dummy_service.c )
target_link_libraries(dummy_service ${XXX_LIBRARY} dummy_messages)
Поскольку библиотека XXX не принадлежит нашей компании и не является общедоступной, мне не разрешено говорить об этом, но я мог бы ответить на вопросы, если они у вас есть.
Пакет debian включает в себя следующие объекты:
-bin
--xxx-gen
--xxx-core
--xxx-master
-include
--headerfiles
---xxx.h
---types.h
---internal
----utilities.h
----descriptors.h
----logging.h
----master.h
----service.h
-lib
--libxxx.so
--cmake
---.cmake files
Комментарии:
1.
that it depends on binaries for x86-64. Is there any way to still get the executable working on the ARM-device?
Итак, скомпилируйте эти библиотеки для ARM, затем свяжите с кросс-скомпилированной версией.. Моя самая простая настройка — это межмашинный контейнер в docker с binfmt-auto и qemu-static.I am not allowed to talk about it, but I could answers questions
: D2. Хорошо, понял. Итак, вот мой вопрос: что такое
XXX
? 😉3. У вас есть источник XXX? Использует ли он систему сборки CMake? вы можете попробовать запустить arm qemu для эмуляции процессора x86_64, чтобы вы могли запустить двоичный файл x86_64 для своей цели ARM
4. Насколько я понимаю, эти библиотеки используют двоичные файлы из пакета debian. И я думаю, что я не могу их скомпилировать, или я могу? Все, что у меня есть, это пакет debian- @Mizux У меня есть упомянутый пакет debian. Проблема в том, что он включает в себя уже скомпилированные двоичные файлы. Пакет debian — это библиотека xxx. Я отредактировал свой вопрос для большей ясности.
5. я хочу сказать, что если у вас были исходные тексты, вы могли бы использовать их с помощью fetchContent() вместо find_package() таким образом, при использовании файла кросс-цепочки инструментов вы также создадите (все) свои третьи стороны, что упростит перекрестную компиляцию, поскольку вы встроили все (кроме базового системного корня)…