赞
踩
近期项目需求,在imx6ull上集成MQTT通讯,准备在ubuntu16.04上通过交叉编译工具链arm-linux-guneabihf- (linaro)编译出.so库,paho-mqtt库依赖于ssl库,所以整个交叉编译移植分为两部分,首先是openssl的移植,生成相应的ssl库,然后移植paho-mqtt生成mqtt通讯库。
./config no-async no-asm shared --prefix=/home/szc/tools/openssl_arm/ssl_arm --cross-compile-prefix=arm-linux-gnueabihf-
说明: no-async 作用是不使用ucontext库 no-asm不使用汇编代码 shared 配置为生成动态库
–prefix用于指定 install 安装路径 --cross-compile-prefix指定交叉编译工具链路径错误原因说明:①perl切换为en_US.UTF-8 ②切换为root权限
sudo ./config no-async no-asm shared --prefix=/home/szc/tools/openssl_arm/ssl_arm --cross-compile-prefix=arm-linux-gnueabihf-
①删除Makefile文件中的 -m64
sed -i ‘s/-m64//’ Makefile
有的版本makefile中需要查看编译器是否为arm-linux-gnueabihf- 不是的话要一一修改如gcc、ar、g++等等
②make&&make install编译生成相关库
编译安装完成后ssl_arm目录如下,即完成openssl交叉编译
paho mqtt 官网地址:https://github.com/eclipse/paho.mqtt.c/releases
①指定生成路径build/install/local
prefox = build/install/local (Makefile同级目录下build/install/local目录下)
②指定交叉编译工具链
CC = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
③添加ssl库路径
CCFLAGS_SO += -I /home/szc/tools/openssl_arm/ssl_arm/include
LDFLAGS_C += -L /home/szc/tools/openssl_arm/ssl_arm/lib
LDFLAGS_CS += -L /home/szc/tools/openssl_arm/ssl_arm/lib
LDFLAGS_A += -L /home/szc/tools/openssl_arm/ssl_arm/lib
LDFLAGS_AS += -L /home/szc/tools/openssl_arm/ssl_arm/lib
FLAGS_EXE += -L /home/szc/tools/openssl_arm/ssl_arm/lib
FLAGS_EXES += -L /home/szc/tools/openssl_arm/ssl_arm/lib
④修改install和uninstall
目的是将paho-mqtt.c的库安装到build/install/local目录下
install: build
mkdir -p
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR)(PREFIX)${includedir}
mkdir -p
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR)(PREFIX)${libdir}
mkdir -p
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR)(PREFIX)${bindir}
mkdir -p
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){man1dir}
mkdir -p
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){man3dir}
cp -f ${MQTTLIB_C_TARGET}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}
cp -f ${MQTTLIB_CS_TARGET}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}
cp -f ${MQTTLIB_A_TARGET}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}
cp -f ${MQTTLIB_AS_TARGET}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}
cp -f ${MQTTVERSION_TARGET}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){bindir}
cp -f ${PAHO_C_PUB_TARGET}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){bindir}
cp -f ${PAHO_C_SUB_TARGET}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){bindir}
cp -f ${PAHO_CS_PUB_TARGET}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){bindir}
cp -f ${PAHO_CS_SUB_TARGET}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){bindir}
ln -sf lib
(
M
Q
T
T
L
I
B
C
)
.
s
o
.
(MQTTLIB_C).so.
(MQTTLIBC).so.{MAJOR_VERSION}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}/lib
(
M
Q
T
T
L
I
B
C
)
.
s
o
l
n
−
s
f
l
i
b
(MQTTLIB_C).so ln -sf lib
(MQTTLIBC).soln−sflib(MQTTLIB_CS).so.${MAJOR_VERSION}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}/lib
(
M
Q
T
T
L
I
B
C
S
)
.
s
o
l
n
−
s
f
l
i
b
(MQTTLIB_CS).so ln -sf lib
(MQTTLIBCS).soln−sflib(MQTTLIB_A).so.${MAJOR_VERSION}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}/lib
(
M
Q
T
T
L
I
B
A
)
.
s
o
l
n
−
s
f
l
i
b
(MQTTLIB_A).so ln -sf lib
(MQTTLIBA).soln−sflib(MQTTLIB_AS).so.${MAJOR_VERSION}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}/lib
(
M
Q
T
T
L
I
B
A
S
)
.
s
o
l
n
−
s
f
l
i
b
(MQTTLIB_AS).so ln -sf lib
(MQTTLIBAS).soln−sflib(MQTTLIB_C).so.${VERSION}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}/lib
(
M
Q
T
T
L
I
B
C
)
.
s
o
.
(MQTTLIB_C).so.
(MQTTLIBC).so.{MAJOR_VERSION}
ln -sf lib
(
M
Q
T
T
L
I
B
C
S
)
.
s
o
.
(MQTTLIB_CS).so.
(MQTTLIBCS).so.{VERSION}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}/lib
(
M
Q
T
T
L
I
B
C
S
)
.
s
o
.
(MQTTLIB_CS).so.
(MQTTLIBCS).so.{MAJOR_VERSION}
ln -sf lib
(
M
Q
T
T
L
I
B
A
)
.
s
o
.
(MQTTLIB_A).so.
(MQTTLIBA).so.{VERSION}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}/lib
(
M
Q
T
T
L
I
B
A
)
.
s
o
.
(MQTTLIB_A).so.
(MQTTLIBA).so.{MAJOR_VERSION}
ln -sf lib
(
M
Q
T
T
L
I
B
A
S
)
.
s
o
.
(MQTTLIB_AS).so.
(MQTTLIBAS).so.{VERSION}
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){libdir}/lib
(
M
Q
T
T
L
I
B
A
S
)
.
s
o
.
(MQTTLIB_AS).so.
(MQTTLIBAS).so.{MAJOR_VERSION}
cp -f ${srcdir}/MQTTAsync.h
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){includedir}
cp -f ${srcdir}/MQTTClient.h
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){includedir}
cp -f ${srcdir}/MQTTClientPersistence.h
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){includedir}
cp -f ${srcdir}/MQTTProperties.h
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){includedir}
cp -f ${srcdir}/MQTTReasonCodes.h
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){includedir}
cp -f ${srcdir}/MQTTSubscribeOpts.h
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){includedir}
- cp -f doc/man/man1/paho_c_pub.1
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){man1dir}
- cp -f doc/man/man1/paho_c_sub.1
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){man1dir}
- cp -f doc/man/man1/paho_cs_pub.1
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){man1dir}
- cp -f doc/man/man1/paho_cs_sub.1
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){man1dir}
- cp -f ${blddir}/doc/MQTTClient/man/man3/MQTTClient.h.3
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){man3dir}
- cp -f ${blddir}/doc/MQTTAsync/man/man3/MQTTAsync.h.3
(
D
E
S
T
D
I
R
)
(DESTDIR)
(DESTDIR){man3dir}
@echo “”
@echo “make install finish”, date
@echo “”
uninstall:
rm -rf $(blddir_work)
@echo “”
@echo “make uninstall finish”, date
@echo “”
编译安装成功后会生成以下库,至此paho-mqtt 移植交叉编译成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。