& quot; DSO отсутствует в командной строке & quot; во время кросс-компиляции пример комара

Я пытаюсь сделать кросс-компиляцию примера программы для комаров. Сначала я собрал пример комара на хост-ПК, он работал хорошо. Makefile выглядит следующим образом:

CFLAGS=-Wall -ggdb -I../../lib -I../../lib/cpp
LDFLAGS=-L../../lib ../../lib/cpp/libmosquittopp.so.1 ../../lib/libmosquitto.so.1

.PHONY: all clean

all : mqtt_temperature_conversion

mqtt_temperature_conversion : main.o temperature_conversion.o
${CXX} $^ -o $@ ${LDFLAGS}

main.o : main.cpp
${CXX} -c $^ -o $@ ${CFLAGS}

temperature_conversion.o : temperature_conversion.cpp
${CXX} -c $^ -o $@ ${CFLAGS}

clean :
-rm -f *.o mqtt_temperature_conversion

Затем я добавляю следующие строки для кросс-компиляции этой программы:

CXX=arm-unknown-linux-gnueabi-gcc
AR=arm-unknown-linux-gnueabi-ar
AS=arm-unknown-linux-gnueabi-as
LD=arm-unknown-linux-gnueabi-ld
RANLIB=arm-unknown-linux-gnueabi-ranlib

Затем выдает сообщение об ошибке:

/home/Tools/tool_chain/bin/../lib/gcc/arm-unknown-linux-
gnueabi/5.4.0/../../../../arm-unknown-linux-gnueabi/bin/ld: main.o:
undefined reference to symbol '_ZdlPv@@GLIBCXX_3.4'/home/Tools/tool_chain/bin/../sysroot/usr/lib/libstdc++.so.6:
error adding symbols: DSO missing from command line

Я очень смущен. Я погуглил на эту ошибку, но ни один из них, похоже, не актуален. Потому что, когда я скомпилировал с компилятором хост-ПК, все работает. Так что это не должно быть проблемой lib.

Обновить:
Так что я не мог понять, что произошло, тогда я сам сделал тестовый проект. Makefile выглядит следующим образом: (я проигнорировал различные переменные части цепочки инструментов, чтобы сэкономить место)

CFLAGS=-Wall -ggdb -I../../lib -I../../lib/cpp
LDFLAGS=-L../../lib ../../lib/cpp/libmosquittopp.so.1 ../../lib/libmosquitto.so.1mqtt: main.o
${CXX} $^ -o $@ ${LDFLAGS}

main.o: main.cpp
${CXX} -c $^ -o $@ ${CFLAGS}

И это сработало ?! Я прошил его на плату, исполняемый файл кажется правильным.

Теперь я более запутался

0

Решение

LD=arm-unknown-linux-gnueabi-ld

Не использовать ld прямо, всегда. Вы хотите использовать g++ как драйвер, который вызывает ваш компоновщик, в противном случае вы будут есть проблемы с компоновщиком.

LD=$(CXX)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]