使用cmake交叉编译使用ProtoBuf的项目

时间:2018-10-18 22:39:27

标签: c++ cmake protocol-buffers

我正在尝试将协议缓冲区添加到可以交叉编译到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,所以也许有些明显的东西我还没有弄清楚。

谢谢!

0 个答案:

没有答案