MQTT学习(四)-linux下交叉编译
mosquitto在运⾏的时候需要⽤到⼏个⽐较重要的动态库libmosquitto.so, libssl.so, libcrypto.so,需要参看⽤户的配置,可能不光光需要包含这么多库,本⽂章在设置是配置项如下:
其中libmosquitto.so是由mosquitto的源代码编译来的⼀些函数的动态库,另外两个则需要先进⾏交叉编译,⽣成ARM架构的动态库才可以在编译的时候应⽤。
1.交叉编译openssl
libssl.so和libcrypto.so其实是openssl的动态库,所以需要进⾏openssl的交叉编译。我⽤的是openssl-1.0.2e,版本之间应该差别不⼤。下载openssl源代码,⽤命令:wget
之后tar -zxvf openssl-1.0.将其解压
./config no-asm -shared – prefix=/usr/local/ssl-1.0.2/, 注意no-sam⼀定要有,–prefix为安装⽬录,如果不执⾏install可以不指定
另外,需要更改编译器,
linux下gcc编译的四个步骤vim Makefile
到CC=gcc(也可能是CC=cc)
将其修改为CC=arm-linux-gnueabihf-gcc(你⾃⼰所⽤到的交叉编译器)
将SHLIB_VERSION_NUMBER=1.0.0改为1.0.2
将SHLIB_MINOR=0.0修改为0.2,保存退出
然后,执⾏make,需要等待⼤概3-5分钟左右的时间,make完毕。
此时可以发现,当前⽬录下出现了libssl.so.1.0.2和libcrypto.so.1.0.2
2.交叉编译libuuid
参考⽹站:
这个⽹站的⽅法是⾃动⽣成makefile⽂件,实际上libuuid的源码也是⾃动⽣成makefile的(我到的是这样)。
./configure –host=arm-linux CC=arm-none-linux-gnueabi-gcc –prefix=/home/default/share/mtd_ulity/pub
–host:表⽰运⾏环境,后⾯跟着的CC表⽰编译⼯具链
–prefix=$(pwd)/install :表明安装路径
接着运⾏ make; make install .既可以在安装⽬录下⽣成库⽂件和.h⽂件
3.交叉编译libmosquitto及mosquitto
这⼀部分是同时完成的。⾸先需要从官⽹下载mosquitto的源⽂件
wget
下载后解压,进⼊到mosquitto-1.4.8⽬录下。
下⾯就要对Makefile进⾏修改:
mosquitto的源代码分了⼏个部分,makefile也包含好⼏个,⾸先在主⽬录下有⼀个Makefile和⼀个config.mk,执⾏命令的时候,会⾸先调⽤Makefile,Makefile⾥⾯第⼀⾏“include config.mk”就会将config.mk⽂件包含进来,相当于config.mk⽂件的内容也是Makefile ⽂件的内容,在主⽬录下的Makefile⽂件⾥⾯,会分别进⼊./lib, ./client, ./src这三个⽬录下分别执⾏make命令,⽽在对应的这三个⽬录下,⼜分别有三个Makefile⽂件,分别对这三部分的相应内容进⾏编译。
(1)⾸先修改编译器
打开config.mk⽂件,在⽂件末尾添加如下语句
CROSS_COMPILE=arm-linux-gnueabihf-
CC=gcc
CXX=g++
(2)接下来修改头⽂件的引⽤位置
在config.mk⽂件中,有⼀⾏内容是”LIB_CFLAGS:={CPPFLAGS} -I. -I.. -I../lib“,指出了编译过程中需要的头⽂件可以放置在如下⼏个录:./ ./../ ./../lib。
但是我们要将openssl和uuid的头⽂件加进去。这边直接到源码,复制到⼀个新建⼀个⽂件夹(third_lib),在将这个⽂件夹路径加⼊LIB_CFLAGS即可。
注意:LIB_CFLAGS为其他⽂件调⽤的路径,为./lib, ./client, ./src的上⼀级⽂件,如./lib下⽂件路径调⽤openssl/ssl.h,则在config.mk 中应该这样写-I../third_lib
(注意openssl⽂件夹⾥⾯的⼀些.h头⽂件是软连接⽂件,需要将其指向⽂件⼀同复制到newdir中去)。
(3)修改动态库⽂件的调⽤位置
在config.mk中,将LIB_LDFLAGS:=${LDFLAGS}这是表⽰其链接库的变量,我们可以新建⼀个⽂件夹(newdir2),将
libuuid.so,libssl.so,libcrypto.so放进去,再将newdir2的路径放到LIB_LDFLAGS中去,就能够在编译时动态调⽤到这三个动态库⽂件。(但是其实在src,lib,client这三个⽂件夹下⾯的make⽂件,使⽤的链接变量不⼀定都是LIB_LDFLAGS,需要根据具体的make⽂件做修改,读者可以⾃⾏修改;万变不离其宗,主要就是为了将这⼏个动态库加⼊编译中)
以上三个步骤完成,基本可以编出mosquitto的执⾏⽂件了。
注意:
1. 会报缺少ares.h⽂件
同样安装(同uuid安装⽅式./configure –host)即可
2. Client⽂件夹make中不到” SSL_set_ex_data”之类的定义
是因为编译中没有把这个加上,在⽣成⽬标⽂件的时候,不指定这些库,就会报出未定义的错误
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论