本来编译一下paho应该是没大问题的,反倒是cortexa9hf-vfp-neon-poky-linux-gnueabi这个工具链使用上出问题了
从开发板开发那边拿到的或者直接从nxp社区下载的sdk,使用上是source一下environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi,export一下路径到env上,这个好理解。
但是当去编译的时候直接调用例如
arm-poky-linux-gnueabi-gcc -o hello hello.c
会直接报错stdio.h找不到
hello.c:1:19: fatal error: stdio.h: No such file or directory
compilation terminated.
这就说明工具链的配置有问题,回头再去看一下environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi里面,注意其中两行
export SDKTARGETSYSROOT=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi export CC="arm-poky-linux-gnueabi-gcc -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=$SDKTARGETSYSROOT"
只看sysroot的话就好理解了,调用arm-poky-linux-gnueabi-gcc的时候用sysroot给进了环境路径
那么再看上面hello.c的例子,只要这样就能编译了
$CC -o hello hello.copenssl交叉编译
理解工具链问题之后,再进行编译就容易多了,paho.mqtt支持tls,所以如果需要tls的话就得先编译openssl
源代码下载openssl官网 https://www.openssl.org/source/
编译prefix写你放置生成文件的目录
cd openssl-1.0.2h ./config no-asm shared --prefix=/home/dd/Desktop/openssl/openssl-1.0.2h/imx6_install
然后打开生成的Makefile,删除所有-m64
注意下CC=那一行,CROSS_COMPILE已经写了arm-poky-linux-gnueabi-,CC里面可能又重复写了,改成这样
CC= $(CROSS_COMPILE)gcc -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.1.15-1.2.0/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi
然后make && make install
paho.mqtt.c交叉编译 git下载源代码git clone https://github.com/eclipse/paho.mqtt.c.git创建目录
cd paho.mqtt.c mkdir imx6_build cd imx6_build生成环境
有些贴写用CMAKE_C_COMPILER来指定编译器,这个工具链下有CC,cmake会读取CC,加了反而又会带来路径找不到的问题
然后看需不需要tls,通过PAHO_WITH_SSL指定
如果是PAHO_WITH_SSL=TRUE的话,需要再指定OPENSSL_ROOT_DIR到编译好的openssl的install目录
//不开启TLS cmake ../ -DPAHO_WITH_SSL=FALSE -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_INSTALL_PREFIX=/home/dd/Desktop/mqtt/paho.mqtt.c/imx6_build/install //开启TLS cmake ../ -DPAHO_WITH_SSL=TRUE -DOPENSSL_ROOT_DIR=/home/dd/Desktop/openssl/openssl-1.0.2h/imx6_install -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_INSTALL_PREFIX=/home/dd/Desktop/mqtt/paho.mqtt.c/imx6_build/install make && make install
完成编译



