ubuntu20.04交叉编译arm版本mosquitto

用3dparty中的build_all_for_one_arch.sh脚本编译arm架构mosquitto
安装vmware,ubuntu20.04虚拟机,vmwaretools,与windows共享文件夹
去模板目录下 touch 一个文本文档 这样右键才会有新建文本文档
安装cmake  vim docker  arm架构的交叉编译器 gcc-aarch64-linux-gnu   g++-aarch64-linux-gnu
sudo apt-get就行sudo apt-get出现无法获取锁的问题就直接sudo apt 不用get
1:用网上的源码编译x86版本的mosquitto 
git clone mosquitto源码 openssl源码 cJSON源码  然后 mkdir build cd build cmake .. make sudo make install
ps:wget 下载压缩包 git clone 下载文件夹   github上面源码也是可以以压缩包形式下载的
tar文件解压tar-xvf
tar.gz文件解压 tar zxvf
zip文件解压 unzip
编译成功,运行mosquitto
mosquitto解决端口被占用:
ps -aux|grep mosquitto   ps-aux查看进程命令
或ps -ef|grep mosquitto
sudo kill xxxxx
但我们需要静态库(.a)文件,默认只生成动态库(.so)文件
cmake编译生成静态库.a文件:修改camkelists中 static lib 部分  将OFF改成ON,或者将SHARED改成STATIC
修改cmakelists后需要重新新建一个build文件夹重新cmake.. 再make   sudo make install 无法直接覆盖原来的


2.
脚本build_all_for_one_arch.sh编译 
在build donwnload文件目录里面放cJSON.tar.gz 网上下载
从第一级目录
先编译openssl
./scripts/build_all_for_one_arch.sh linux-x86_64 openssl
再编译mosquitto
./scripts/build_all_for_one_arch.sh linux-x86_64 mosquitto
找不到文件:是由于windows复制过来的脚本 因为换行符不同的原因。(win \r  linux \n)
方法1:
sed -i 's/\r$//' xxxx.sh
方法2:
sudo apt-get install dos2unix
dos2unix xxxx.sh
或者用vim改
vi或者vim xxxx
i 插入 要按esc才能:wq 保存退出 :q 退出
好多文件都要加
但是还是找不到 ,给build...one..加权限
加权限 chmod  +x   xxxxx.sh
再编译 
./scripts/build_all_for_one_arch.sh linux-x86_64 mosquitto
如果提示没权限 加sudo
无法编译:
将mosquitto.sh脚本中 版本1.4.8换成2.0.14 成功编译 生成静态库文件libmosquitto.a libmosquittopp.a
静态库文件libxxx.a 动态库文件libxxx.so   在build/lib 里面  

ps:修改脚本时
编写shell脚本  xxx.sh时
第一行要加#!/bin/bash
然后要chmod +x 增加权限
再./xxx.sh运行
echo“  xxx”  显示
sed命令可以对文件进行操作
脚本里面pushd是进入目录 popd是返回原来目录 代码在src目录下


3.用脚本编译arm版本的mosquitto库
前面步骤同2

先编译openssl

./scripts/build_all_for_one_arch.sh linux-aarch64 openssl
运行./scripts/build_all_for_one_arch.sh linux-aarch64 mosquitto

编译mosquitto遇到的问题
No CMAKE_CXX_COMPILER could be found
解决方法:sudo apt-get install -y xsltproc
xsltproc not found: manpages cannot be built
解决方法:sudo apt-get install -y xsltproc

ps:查看ip  ifconfig
查看支持的架构类型是x86还是arm   file xxxx.so 动态库

但编译完成之后生成的cjson生成的还是动态库文件 所以更改cjson的cmakelists
在脚本中加sed命令
sed -i 'xxs/原字符串/替换字符串/g' 文件名 
sed -i '121s/Off/ON/g' CMakeLists.txt  修改cmakelists第121行的Off为ON
#指定行替换
sed 's/原字符串/替换字符串/g' 文件名
#替换匹配到的关键字
# 在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个
 

你可能感兴趣的:(arm,linux,嵌入式硬件)