交叉编译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
相关产品推荐
相关产品推荐

