Как связать библиотеки на кросс-компиляторе Raspberry Pi? - PullRequest
0 голосов
/ 17 апреля 2020

Я следовал этому руководству , чтобы создать кросс-компилятор для Raspberry Pi ARMv7. Он отлично работает (компилируется нормально, привет), но проблема в том, что я не могу использовать библиотеки Raspberry Pi, такие как wiringpi, sqlite et c.

Это мой Makefile.

CC = /opt/cross-pi-gcc/bin/arm-linux-gnueabihf-g++
QUOTE := "
CFLAGS = -g -lwiringPi -pthread -lpthread
PROGRAM = lora
OBJDIR = obj

CPP_SRCS += \
src/main.cpp \
src/radio/sx1276/sx1276.cpp \
src/radio/radio.cpp \

OBJ_FILES += \
$(OBJDIR)/main.o \
$(OBJDIR)/sx1276.o \
$(OBJDIR)/radio.o \


all: make_dir $(OBJ_FILES)
    $(CC) $(OBJ_FILES) $(CFLAGS) -o $(PROGRAM)  

make_dir:
    mkdir -p $(OBJDIR)

$(OBJDIR)/main.o: src/main.cpp
    $(CC) $(CFLAGS) -c -o $@ $<

$(OBJDIR)/service.o: src/service/service.cpp
    $(CC) $(CFLAGS) -c -o $@ $<

$(OBJDIR)/sx1276.o: src/radio/sx1276/sx1276.cpp
    $(CC) $(CFLAGS) -c -o $@ $<

$(OBJDIR)/radio.o: src/radio/radio.cpp 
    $(CC) $(CFLAGS) -c -o $@ $<

clean:
    rm $(PROGRAM)
    rm -rf $(OBJDIR)

Ошибка, которую я получаю:

/opt/cross-pi-gcc/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lwiringPi

Я скопировал некоторые библиотеки из моего Pi в папку на моем домашнем каталоге с помощью этой команды.

rsync -vR --progress -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr,opt/vc/lib} $HOME/raspberrypi/rootfs

Который я нашел здесь .

Но я не уверен, как их связать. Я что-то упустил?

Примечание: фрагмент кода, который я пытаюсь скомпилировать, прекрасно компилировался на кросс-компиляторе Windows. Я пытаюсь настроить цепочку инструментов на своем рабочем столе Linux. Я использую Манджаро.

1 Ответ

1 голос
/ 17 апреля 2020

Вы должны указать компоновщику, где искать библиотеки.
Вы можете добавить флаг -L$HOME/raspberrypi/rootfs/usr/lib или там, где расположен libwiringPi.so.

Вы должны указать компилятору на правильные заголовки, а также. Для этого вы используете флаг -I. Например, -I$HOME/raspberrypi/rootfs/usr/include. Это относится к CFLAGS целей, которые включают wiringPi.h.

Кроме того, -lwiringPi -pthread -lpthread не относятся к CFLAGS, они являются флагами компоновщика. Они нужны вам только в цели, которая строит PROGRAM. Вы можете добавить отдельную переменную LDFLAGS, например.

...