c++ - 使用 cmake 交叉编译使用 ProtoBuf 的项目
问题描述
我正在尝试将协议缓冲区添加到交叉编译到 ARM 的 cmake 构建中。这是一个定制板,不可能在目标上构建,我必须能够交叉编译。
我遇到的问题是要获取 .proto 文件并生成 x.pb.c 文件,我需要使用 protoc 的主机版本及其库,但是当我使用生成的 x.pb.c 时源文件 我需要使用 ARM 版本的库来构建我的应用程序。如果我不这样做,我会在链接时收到以下错误:
/usr/bin/ld.lld-5.0: error: /usr/local/lib/libprotobuf.so is incompatible with armelf_linux_eabi
错误是正确的,因为文件位于:
/usr/local/lib/libprotobuf.so
是主机版本而不是 ARM 版本。手臂版本位于:
/mnt/c/zprotocol/linux_arm/lib/libprotobuf.so
我生成 x.pb.c 文件时的 cmake 文件是:
cmake_minimum_required( VERSION 3.5 )
project( base )
set( CMAKE_CXX_STANDARD 11 )
include( FindProtobuf )
find_package( Protobuf REQUIRED )
include_directories( ${PROTOBUF_INCLUDE_DIR} )
protobuf_generate_cpp( PROTO_SRC PROTO_HEADER test.proto )
add_library( proto ${PROTO_HEADER} ${PROTO_SRC} )
target_link_libraries( proto ${PROTOBUF_LIBRARIES} )
这一切都很好,我生成的文件没有问题。我不知道如何告诉 cmake 在链接使用生成的协议缓冲区文件的应用程序时,它需要在不同的路径中查找。
我认为 find_package 以某种方式为整个构建设置路径。我尝试通过以下方式在使用生成协议文件的应用程序的 cmake 文件中添加适当的路径:
include_directories( /mnt/c/zprotocol/linux_arm/lib/ )
和
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L /mnt/c/zprotocol/linux_arm/lib" )
没有成功。
有人有我可以尝试的建议吗?我还在学习 cmake,所以也许有一些我还没有弄清楚的明显的东西。
谢谢!
解决方案
推荐阅读
- java - 单击列表视图项时,我试图从火力库中检索相应的子值
- json - 'NSInvalidArgumentException',原因:'JSON 写入中的无效数值(无限)'
- r - R中vegan包的varpart函数检测因子和数值变量之间的意外共线性
- sql - 如何将 2 个现有列作为新字段进行比较
- rest - 我应该如何将 SAML 登录与 REST API + SPA 应用程序一起使用?
- angular - 在 Angular (7x) 中创建多模块项目应用程序的方法?对于铬分机
- javascript - 有没有办法只允许读写规则来自指定的url?
- regex - 如何使用过滤器仅在 Google 表格中显示包含日语的单元格?
- javascript - 当 css 样式为 height: 100% 时检测滚动及其方向;和溢出:滚动;
- excel - 无缝链接来自越来越多 Excel 电子表格的时间序列数据