You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

交叉编译gRPC C++ for QNX时protobuf库文件找不到问题求助

QNX SDP 7.0交叉编译gRPC v1.52.2链接libprotobuf.a报错的解决方法

针对你遇到的ntoaarch64-ar: CMakeFiles/libprotobuf.dir/__/src/google/protobuf/any_lite.cc.o: No such file or directory错误,提供以下几个可行的解决方向:

1. 修正CMake命令的路径错误

你执行的CMake命令末尾多了一个冗余的..,这会导致CMake解析路径时出现异常,生成错误的目标文件引用路径。正确的命令应该是:

cmake ../.. -DCMAKE_TOOLCHAIN_FILE=../qnx_toolchain.cmake

进入build文件夹后,../..指向gRPC根目录,../qnx_toolchain.cmake指向cmake目录下的工具链文件,不需要额外添加末尾的..。

2. 修复静态库构建的路径解析问题

QNX的ar工具在处理相对路径时可能存在解析bug,可通过修改CMake配置强制使用绝对路径或调整ar的调用方式:
在你的qnx_toolchain.cmake中添加以下配置:

# 强制ar工具使用正确的目标文件路径格式
set(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS>")
# 指定ar工具的绝对路径,避免环境变量解析问题
set(CMAKE_AR "$ENV{QNX_HOST}/usr/bin/aarch64-unknown-nto-qnx7.0.0-ar" CACHE STRING "")

3. 清理缓存后重新构建

CMake缓存的旧路径信息可能导致异常,执行以下步骤彻底清理后重新构建:

cd build
# 删除CMake缓存和临时文件
rm -rf CMakeCache.txt CMakeFiles/
# 重新生成Makefile
cmake ../.. -DCMAKE_TOOLCHAIN_FILE=../qnx_toolchain.cmake
# 清理旧编译产物并重新编译
make clean
make -j$(nproc)

4. 单独构建protobuf作为外部依赖

子模块构建时的路径嵌套可能引发问题,可单独编译protobuf再引入gRPC:

# 进入protobuf子模块目录
cd ../protobuf
mkdir build && cd build
# 编译并安装protobuf到指定目录
cmake .. -DCMAKE_TOOLCHAIN_FILE=../../qnx_toolchain.cmake -DCMAKE_INSTALL_PREFIX=/your/install/path/protobuf
make install
# 回到gRPC的build目录,指定已安装的protobuf路径
cd ../../gRPC/build
cmake ../.. -DCMAKE_TOOLCHAIN_FILE=../qnx_toolchain.cmake -DProtobuf_DIR=/your/install/path/protobuf/lib/cmake/protobuf
make

内容的提问来源于stack exchange,提问作者Faruk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:28:29