ubuntu交叉编译移植paho.mqtt.c-1.3.0到i.max6ull

本项目是在i.mx6u上移植mqtt协议

记录一下在移植mqtt协议时出现的问题和解决方法:

首先在按照正点原子的教程编译MQTT时出现问题,原因是Makefile写的有问题,openssl库在交叉编译的时候出现问题,目前原因还不是很清楚,参考其它大神的解决办法,问题得到解决。

一.下载并交叉编译openssl

1.1 下载openssl

openssl官网

https://www.openssl.org/source/

 创建新的文件夹openssl_arm保存源码,并在此文件夹路径下创建安装目录ssl_arm

1.2 配置源文件生成Makefile

sudo ./config no-async no-asm shared --prefix=/home/yzj/tools/openssl_arm/ssl_arm --cross-compile-prefix=arm-linux-gnueabihf-

命令中的路径改成自己的路径

执行成功后会在目录下创建Makefile文件

1.3 修改Makefile

进入openssl-1.1.1s,修改此目录下的makefile

可以用vim命令打开,这里我直接用vscode打开方便修改

1.删除Makefile文件中的-m64

在vscode中Ctrl+F搜索-m64并删除,有的版本makefile中需要查看编译器是否为arm-linux-gnueabihf- 不是的话要一一修改如gcc、ar、g++等等

2.编译生成相关库

make&&make install

编译安装完成后ssl_arm目录如下,即完成openssl交叉编译

二.交叉编译移植paho.mqttd

 1.1 下载paho.mqtt.c-1.3.0源码

paho mqtt 官网地址:https://github.com/eclipse/paho.mqtt.c/releases

 

我下载的是1.3.0版本,大家自己看情况,尽量跟我一致。

1.2 修改Makefile

1.下载解压完成后,在paho.mqtt.c-1.3.0文件夹下,创建如下文件夹

 2.创建完成后修改Makefile,如下

修改为指定路径build/install/local

3.指定交叉编译工具链

CC = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc

4.添加ssl库路径

CCFLAGS_SO += -I /home/yzj/tools/openssl_arm/ssl_arm/include
LDFLAGS_C += -L /home/yzj/tools/openssl_arm/ssl_arm/lib
LDFLAGS_CS += -L /home/yzj/tools/openssl_arm/ssl_arm/lib
LDFLAGS_A += -L /home/yzj/tools/openssl_arm/ssl_arm/lib
LDFLAGS_AS += -L /home/yzj/tools/openssl_arm/ssl_arm/lib
FLAGS_EXE += -L /home/yzj/tools/openssl_arm/ssl_arm/lib
FLAGS_EXES += -L /home/yzj/tools/openssl_arm/ssl_arm/lib

 注意:路径需要按照自己的路径进行修改

上面为我的路径。

5.修改install和uninstall

install:

install: build
	mkdir -p $(DESTDIR)$(PREFIX)${includedir}
	mkdir -p $(DESTDIR)$(PREFIX)${libdir}
	mkdir -p $(DESTDIR)$(PREFIX)${bindir}
	mkdir -p $(DESTDIR)${man1dir}
	mkdir -p $(DESTDIR)${man3dir}
	cp -f ${MQTTLIB_C_TARGET} $(DESTDIR)${libdir}
	cp -f ${MQTTLIB_CS_TARGET} $(DESTDIR)${libdir}
	cp -f ${MQTTLIB_A_TARGET} $(DESTDIR)${libdir}
	cp -f ${MQTTLIB_AS_TARGET} $(DESTDIR)${libdir}
	cp -f ${MQTTVERSION_TARGET} $(DESTDIR)${bindir}
	cp -f ${PAHO_C_PUB_TARGET} $(DESTDIR)${bindir}
	cp -f ${PAHO_C_SUB_TARGET} $(DESTDIR)${bindir}
	cp -f ${PAHO_CS_PUB_TARGET} $(DESTDIR)${bindir}
	cp -f ${PAHO_CS_SUB_TARGET} $(DESTDIR)${bindir}
	ln -sf lib$(MQTTLIBC).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_C).so
	ln -sf lib$(MQTTLIB_CS).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_CS).so
	ln -sf lib$(MQTTLIB_A).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_A).so
	ln -sf lib$(MQTTLIB_AS).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_AS).so
	ln -sf lib$(MQTTLIB_C).so.${VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_C).so.${MAJOR_VERSION}

	ln -sf lib$(MQTTLIB_CS).so.${VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_CS).so.${MAJOR_VERSION}

	ln -sf lib$(MQTTLIB_A).so.${VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_A).so.${MAJOR_VERSION}

	ln -sf lib$(MQTTLIB_AS).so.${VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_AS).so.${MAJOR_VERSION}

	cp -f ${srcdir}/MQTTAsync.h $(DESTDIR)${includedir}
	cp -f ${srcdir}/MQTTClient.h $(DESTDIR)${includedir}
	cp -f ${srcdir}/MQTTClientPersistence.h $(DESTDIR)${includedir}
	cp -f ${srcdir}/MQTTProperties.h $(DESTDIR)${includedir}
	cp -f ${srcdir}/MQTTReasonCodes.h $(DESTDIR)${includedir}
	cp -f ${srcdir}/MQTTSubscribeOpts.h $(DESTDIR)${includedir}
	- cp -f doc/man/man1/paho_c_pub.1 $(DESTDIR)${man1dir}
	- cp -f doc/man/man1/paho_c_sub.1 $(DESTDIR)${man1dir}
	- cp -f doc/man/man1/paho_cs_pub.1 $(DESTDIR)${man1dir}
	- cp -f doc/man/man1/paho_cs_sub.1 $(DESTDIR)${man1dir}
	- cp -f ${blddir}/doc/MQTTClient/man/man3/MQTTClient.h.3 $(DESTDIR)${man3dir}
	- cp -f ${blddir}/doc/MQTTAsync/man/man3/MQTTAsync.h.3 $(DESTDIR)${man3dir}
	@echo “”
	@echo “make install finish”, 'date'
	@echo “”

uninstall:

uninstall:
	rm -rf $(blddir_work)
	@echo “”
	@echo “make uninstall finish”, 'date'
	@echo “”

 1.3 编译

修改完成后make &&make install 生成库

重点来了,当在执行上述命令后如果出现以下错误:

 查看build路径,发现没有生成doc文件夹,需要运行 make html 生成,运行 make html 时,报错误 /bin/sh: 1: doxygen: not found,没有安装doxygen,参考这篇文章:https://blog.csdn.net/yamida/article/details/79428515

安装完成后:sudo make uninstall 去掉前面有错的安装,再make html,没有报错后,再sudo make install 重新安装。如下:

接下来就是打包,移植的i.max6ull上啦,总的来说还是遇到各种各样的问题,但是稍微花点时间还是解决啦。

参考:http://e.betheme.net/zz/822260.aspx?action=onClick

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值