Использование cmake для кросс-компиляции проекта, использующего ProtoBuf - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь добавить протокольные буферы в сборку cmake, где они были кросс-компилированы в ARM.Это настраиваемая доска, и на ней невозможно построить цель, я должен иметь возможность кросс-компиляции.

У меня проблема в том, что нужно взять файл .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версия.Версия arm:

/mnt/c/zprotocol/linux_arm/lib/libprotobuf.so

Файл cmake для того, когда я генерирую файл x.pb.c:

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, так что, может быть, есть что-то очевидное, чего я еще не понял.

Спасибо!

...