“DSO从命令行中丢失”,同时交叉编译mosquitto示例

时间:2017-10-30 10:34:47

标签: c++ makefile cross-compiling mosquitto libmosquitto

我正在尝试交叉编译mosquitto示例程序。起初我在Host PC上编译了mosquitto示例,它运行良好。 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

我很困惑。我搜索了这个错误,但似乎没有一个相关。因为当我使用主机PC编译器编译时,一切正常。所以它不应该是一个lib问题。

更新: 所以我无法弄清楚发生了什么,然后我自己做了一个测试项目。 Makefile如下:(我忽略了交叉工具链变量部分以保存一些地方)

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


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

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

它有效吗?!我把它刷到了可执行程序似乎是正确的板上。

现在我更加困惑

1 个答案:

答案 0 :(得分:1)

LD=arm-unknown-linux-gnueabi-ld

永远不要直接使用ld。您希望使用g++作为调用链接器的驱动程序,否则 会出现链接器问题。

LD=$(CXX)