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