Перекрестная компиляция для arm с зависимостями от общего объекта, которые доступны только для x86-64

#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 : D

2. Хорошо, понял. Итак, вот мой вопрос: что такое XXX ? 😉

3. У вас есть источник XXX? Использует ли он систему сборки CMake? вы можете попробовать запустить arm qemu для эмуляции процессора x86_64, чтобы вы могли запустить двоичный файл x86_64 для своей цели ARM

4. Насколько я понимаю, эти библиотеки используют двоичные файлы из пакета debian. И я думаю, что я не могу их скомпилировать, или я могу? Все, что у меня есть, это пакет debian- @Mizux У меня есть упомянутый пакет debian. Проблема в том, что он включает в себя уже скомпилированные двоичные файлы. Пакет debian — это библиотека xxx. Я отредактировал свой вопрос для большей ясности.

5. я хочу сказать, что если у вас были исходные тексты, вы могли бы использовать их с помощью fetchContent() вместо find_package() таким образом, при использовании файла кросс-цепочки инструментов вы также создадите (все) свои третьи стороны, что упростит перекрестную компиляцию, поскольку вы встроили все (кроме базового системного корня)…