成功移植MQTT-PAHO到嵌入式arm-linux

主要参考:

https://cloud.baidu.com/forum/topic/show/761030

https://blog.csdn.net/qq_28643619/article/details/86011212

主要区别(cc = arm-linux-gnueabihf-gcc -fPIC)

1.修改第70行CC ?= gcc为:

CC = arm-linux-gnueabihf-gcc -fPIC

2.第43行SOURCE_FILES_C = $(srcdir)/*.c改为:

SOURCE_FILES_C = $(wildcard $(srcdir)/*.c)
OBJS = $(addsuffix .o,$(basename $(SOURCE_FILES_C)))

这两行是把那个目录下的所有.c文件都编译进去,不然,后面引用这个库的时候会出错

3.第95行rm -rf ${blddir}/* 改为:

rm -rf ${blddir}/* ${srcdir}/../samples/transport.o

4.第110行改为:

${EMBED_MQTTLIB_C_TARGET}: $(OBJS) ${HEADERS_C}

第111行改为:

${CC} ${CCFLAGS_SO} -o $@ $(OBJS) ${LDFLAGS_C}

这是把所有的.o文件都链接到动态库中。不然,后面引用动态库的时候会报错误说缺少相关引用。

5.在121行install: build下面添加:

-mkdir -p $(DESTDIR)${libdir}
-mkdir -p $(DESTDIR)${includedir}
cp -r $(HEADERS) $(DESTDIR)${includedir}

这是创建安装目录、复制头文件。

6.make
make输出

7.make install执行如下指令:

make install DESTDIR=/home/paho.mqtt.embedded-c-master prefix= 

这里指定prefix(前缀)为空,不然安装的时候,会在我们指定的目录后加入usr/local这个子路径。

就安装到了主机的/home/paho.mqtt.embedded-c-master目录下了,这个目录下会多出两个子目录:

1)、include,这个在我们编译自己的程序的时候需要用到;

2)、lib子目录,这个是我们编译自己的程序需要链接的一个动态库文件[libpaho-embed-mqtt3c.so.1.0],后期应用时把它复制到arm板根文件系统的/usr/lib中。如果复制了还是报错,找不到libpaho-embed-mqtt3c.so.1.0的话,将工程根目录下的paho.mqtt.embedded-c/build/output目录下的三个so文件全部移植到arm板根文件系统的/usr/lib中,再把paho.mqtt.embedded-c/lib/libpaho-embed-mqtt3c.so.1.0复制过去

8.针对自己的工程文件(abc.c) 输出可执行文件(ABC)使用命令:

arm-linux-gnueabihf-gcc -fPIC -g -o ABC abc.c -lpaho-embed-mqtt3c -I MQTTPacket/src -L build/output

你可能感兴趣的:(成功移植MQTT-PAHO到嵌入式arm-linux)