QNX交叉编译protobuf和fdbus

本文详细介绍了在Ubuntu 16.04环境下,针对QNX 700平台进行protobuf和fdbus的下载、配置及交叉编译的过程。包括解决编译过程中遇到的各种问题及其解决方案。

protobuf的下载和交叉编译

环境:ubantu16.04,qnx700

1.下载protobuf源码

https://github.com/protocolbuffers/protobuf.git

查资料看他们操作都是clone下来直接执行./autogen.sh,在我实际操作时候,发现main分支上没有该脚本,所以切换了分支到3.19.x分支

2.执行autogen.sh生成configure文件

./autogen.sh

3.由于是在ubantu上进行qnx交叉编译,所以需要先source一下环境

source /home/mujinchao/workspace/qnx700/qnxsdp-env.sh

4.执行configure

./configure --prefix=/home/mujinchao/workspace/protobuf-test/protobuf/aarch64_out/ --host=arm CC=aarch64-unknown-nto-qnx7.0.0-gcc  CXX=aarch64-unknown-nto-qnx7.0.0-g++ CPPFLAGS='-D_XOPEN_SOURCE=500'


1.--prefix    表示文件输出路径
2.--host      指定编译环境
3.CC=         指定gcc路径
4.CXX=        指定g++路径
5.CPPFLAGS=   由于在编译时候,出现找不到"read","close"等函数,在网上查阅后增加了该参数,具体原因参考以下链接:
https://github.com/protocolbuffers/protobuf/issues/7794

 5.执行编译

make
sudo make install

参考文档:Unable to Compile Protobuf for QNX aarch64 · Issue #7794 · protocolbuffers/protobuf · GitHubhttps://github.com/protocolbuffers/protobuf/issues/7794

 fdbus的下载和交叉编译

环境:ubantu16.04,qnx700

1.下载fdbus源码

git clone https://github.com/jeremyczhen/fdbus.git

2.在同级目录下创建了一个toolchain.cmake文件用于指定编译环境,内容如下:

SET(CMAKE_SYSTEM_NAME arm)
SET(CMAKE_CXX_COMPILER /home/mujinchao/workspace/qnx700/host/linux/x86_64/usr/bin/aarch64-unknown-nto-qnx7.0.0-g++)
SET(CMAKE_C_COMPILER /home/mujinchao/workspace/qnx700/host/linux/x86_64/usr/bin/aarch64-unknown-nto-qnx7.0.0-gcc)

3.进入fdbus目录,创建编译目录和打包目录

cd fdbus
mkdir -p build/install
cd build

4.执行cmake

cmake -DCMAKE_INSTALL_PREFIX=install -DSYSTEM_ROOT=~/workspace/protobuf-test/protobuf/build/ -DCMAKE_TOOLCHAIN_FILE=../../toolchain.cmake -Dfdbus_SOCKET_ENABLE_PEERCRED=OFF -Dfdbus_PIPE_AS_EVENTFD=true -Dfdbus_QNX_KEEPALIVE=ON -Dfdbus_SOCKET_QNX_PEERCRED=ON -Dfdbus_LINK_SOCKET_LIB=ON ../cmake/


-DCMAKE_INSTALL_PREFIX    指定打包目录
-DSYSTEM_ROOT             指定protobuf交叉编译后文件目录
-DCMAKE_TOOLCHAIN_FILE    指定编译环境的cmake文件

-Dfdbus_SOCKET_ENABLE_PEERCRED=OFF -Dfdbus_PIPE_AS_EVENTFD=true    
官方文档说明:The same as cross compiling, but when building fdbus, should add the following option to cmake since QNX doesn’t support peercred and eventfd:所以需要设置该两项

-Dfdbus_QNX_KEEPALIVE=ON 
-Dfdbus_SOCKET_QNX_PEERCRED=ON 
-Dfdbus_LINK_SOCKET_LIB=ON
以上参数是我在编译时出现了问题后,规避错误设置的参数,具体错误可以参考以下我的提问:
https://github.com/jeremyczhen/fdbus/issues/37

 5.执行make,在此期间我遇到了比较多的问题,例如:

5.1 找不到SO_PASSCRED;

5.2 invalid application of 'sizeof' to incomplete type;

5.3 cannot find -lpthread;

5.4 undefined reference to 'getnameinfo'等问题

在该链接下已经说明了过程,如果需要可以参考:

QNX交叉编译错误 · Issue #37 · jeremyczhen/fdbus (github.com)https://github.com/jeremyczhen/fdbus/issues/376.make成功后执行

sudo make install

生成如上文件;

7.测试:将bin目录中可执行文件fdbxclient fdbxserver name_server拷贝至开发板,将lib库拷贝至开发板;

 

 7.1修改可执行文件权限

chomd 755 fdbx*
chomd 755 name_*

7.2直接执行时候报错如下

因为没指定环境变量

添加fdbus库所在文件至环境变量

export LD_LIBRARY_PATH=:/mujinchao/

 7.3分别执行name_server、fdbxserver、fdbxclient

会打印出如下内容:

参考文档: Introduction — FDbus 1.0 documentationhttps://fdbus.readthedocs.io/en/latest/readme.html#for-single-host

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值