Кросс-компиляция программы c из x86 для использования библиотеки cython

Я хотел бы скомпилировать программу C, которую я сделал для своего Raspberry Pi, с моего ПК.

Моя программа использует библиотеки rt, pthread и cython.

Я использую для этого компилятор arm-linux-gnueabihf-gcc и сделал make-файл:

CC = gcc

CC_ARM = arm-linux-gnueabihf-gcc

CFLAGS = -I -g -Wall

INCLUDES = -I/usr/include/python3.8 -I/

LIBS = -lrt -lpthread -lpython3.8

SRCS = main.c Config_radio.c

OBJS = $(SRCS:.c=.o)

MAIN = radio

ARM = radio_arm

.PHONY: depend clean

all:    $(MAIN)
        @echo  radio has been compiled

$(MAIN): $(OBJS)
        $(CC) $(CFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LFLAGS) $(LIBS)

$(ARM): $(OBJS)
        $(CC_ARM) $(CFLAGS) $(INCLUDES) -o $(ARM) $(OBJS) $(LFLAGS) $(LIBS)

.c.o:
        $(CC) $(CFLAGS) $(INCLUDES) -c $<  -o $@

clean:
        $(RM) *.o *~ $(MAIN)

depend: $(SRCS)
        makedepend $(INCLUDES) $^

Когда я компилирую с помощью gcc, компиляция проходит успешно, но когда я пытаюсь скомпилировать с помощью arm-linux-gnueabihf-gcc, я получаю следующую ошибку:

make radio_arm
gcc -I -g -Wall -I/usr/include/python3.8 -I/ -c main.c  -o main.o
gcc -I -g -Wall -I/usr/include/python3.8 -I/ -c Config_radio.c  -o Config_radio.o
arm-linux-gnueabihf-gcc -I -g -Wall -I/usr/include/python3.8 -I/ -o radio_arm main.o Config_radio.o  -lrt -lpthread -lpython3.8
main.o: file not recognized: file format not recognized
collect2: error: ld returned 1 exit status
make: *** [Makefile:28 : radio_arm] Erreur 1

Я думаю, что мои библиотеки не работают с arm-linux-gnueabihf-gcc.

Можете ли вы объяснить мне, как это решить?

Получение данных из формы с помощью JavaScript - краткое руководство
Получение данных из формы с помощью JavaScript - краткое руководство
Получить данные из формы с помощью JS очень просто: вы запрашиваете элемент формы, передаете его конструктору new FormData() и, наконец, получаете...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
0
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы использовали gcc для компиляции main.o. Этот GCC предположительно является родным компилятором вашей системы x86. Следовательно, в main.o будет код x86, и его нельзя связать с программой ARM.

Убедитесь, что все ваши объекты и все библиотеки, которые вы связываете, были скомпилированы с помощью набора инструментов ARM, и тогда все должно быть в порядке.

Кроме того, -I/usr/include/python3.8 кажется мне проблемой, потому что это будут заголовки для родного Python в вашей системе, а не Python, который был кросс-компилирован для ARM. Это может сработать, но выглядит довольно рискованно. Также -I само по себе и -I/ не имеет особого смысла.

Спасибо за вашу помощь, я исправил свой Makefile и, как вы сказали, я получаю следующую ошибку: fatal error: arm-linux-gnueabihf/python3.8/pyconfig.h: No such file or directory 13 | # include <arm-linux-gnueabihf/python3.8/pyconfig.h> Кто-нибудь знает, какие пакеты установить, чтобы исправить это?

Tears4fears 06.04.2022 22:58

Я предполагаю, что pyconfig.h будет создан как часть процесса компиляции/сборки Python, если его сейчас не найти. Маловероятно, что ваш конкретный дистрибутив Linux имеет кросс-компилированный пакет Python 3.8, поэтому вам просто нужно скомпилировать его самостоятельно с помощью кросс-компилятора, а затем установить его в какой-нибудь каталог.

David Grayson 06.04.2022 23:35

компиляция на моем raspberry pi с этим make-файлом сработала. Я попытаюсь найти зависимости для установки на свой ПК с Ubuntu. В очередной раз благодарим за помощь

Tears4fears 07.04.2022 19:57

Другие вопросы по теме