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
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
会打印出如下内容:

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

被折叠的 条评论
为什么被折叠?



