主要参考:
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.make7.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