Я хотел бы скомпилировать программу 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.
Можете ли вы объяснить мне, как это решить?
Вы использовали gcc
для компиляции main.o
. Этот GCC предположительно является родным компилятором вашей системы x86. Следовательно, в main.o
будет код x86, и его нельзя связать с программой ARM.
Убедитесь, что все ваши объекты и все библиотеки, которые вы связываете, были скомпилированы с помощью набора инструментов ARM, и тогда все должно быть в порядке.
Кроме того, -I/usr/include/python3.8
кажется мне проблемой, потому что это будут заголовки для родного Python в вашей системе, а не Python, который был кросс-компилирован для ARM. Это может сработать, но выглядит довольно рискованно. Также -I
само по себе и -I/
не имеет особого смысла.
Я предполагаю, что pyconfig.h будет создан как часть процесса компиляции/сборки Python, если его сейчас не найти. Маловероятно, что ваш конкретный дистрибутив Linux имеет кросс-компилированный пакет Python 3.8, поэтому вам просто нужно скомпилировать его самостоятельно с помощью кросс-компилятора, а затем установить его в какой-нибудь каталог.
компиляция на моем raspberry pi с этим make-файлом сработала. Я попытаюсь найти зависимости для установки на свой ПК с Ubuntu. В очередной раз благодарим за помощь
Спасибо за вашу помощь, я исправил свой Makefile и, как вы сказали, я получаю следующую ошибку:
fatal error: arm-linux-gnueabihf/python3.8/pyconfig.h: No such file or directory 13 | # include <arm-linux-gnueabihf/python3.8/pyconfig.h>
Кто-нибудь знает, какие пакеты установить, чтобы исправить это?