로컬에 Protocol Buffers을 설치했습니다.ROS 내에 로컬로 설치된 프로토콜 버퍼를 사용할 수 없습니다.
.
├── CMakeLists.txt
├── package.xml
├── include
│ ├── addressbook.pb.cc
│ ├── addressbook.pb.h
│ └── addressbook.proto
├── lib
│ └── protobuf-3.5.0
└── src
└── main.cpp
Protocol Buffers이 lib/protobuf-3.5.0
디렉토리 내에 ./configure --prefix=$PWD
를 사용하여 로컬로 설치 : 아래 ROS 패키지의 디렉토리 구조입니다.
catkin_make
을 사용하여 ROS 패키지를 컴파일하는 동안 이전 버전의 프로토콜 버퍼를 참조하고 버전 비 호환성 오류를 나타내는 것으로 보입니다.
[ 0%] Building CXX object local_protobuf_ros_example/CMakeFiles/addressbook_protobuf.dir/include/addressbook.pb.cc.o
In file included from /home/bgplvm/ros_ws/src/local_protobuf_ros_example/include/addressbook.pb.cc:4:0:
/home/bgplvm/ros_ws/src/local_protobuf_ros_example/include/addressbook.pb.h:12:2: error: #error This file was generated by a newer version of protoc which is
#error This file was generated by a newer version of protoc which is
^
/home/bgplvm/ros_ws/src/local_protobuf_ros_example/include/addressbook.pb.h:13:2: error: #error incompatible with your Protocol Buffer headers. Please update
#error incompatible with your Protocol Buffer headers. Please update
^
/home/bgplvm/ros_ws/src/local_protobuf_ros_example/include/addressbook.pb.h:14:2: error: #error your headers.
#error your headers.
^
In file included from /home/bgplvm/ros_ws/src/local_protobuf_ros_example/include/addressbook.pb.cc:4:0:
/home/bgplvm/ros_ws/src/local_protobuf_ros_example/include/addressbook.pb.h:23:35: fatal error: google/protobuf/arena.h: No such file or directory
#include <google/protobuf/arena.h>
^
compilation terminated.
있지만, 나는 CMakeLists.txt
내부 message(STATUS "Using Protocol Buffers ${Protobuf_VERSION}")
문을 넣고는 프로토콜 버퍼 3.5.0를 사용하고 있음을 발견했다. CMakeLists.txt
아래를 참조하십시오 :
cmake_minimum_required(VERSION 2.8.3)
project(local_protobuf_ros_example)
find_package(catkin REQUIRED COMPONENTS roscpp)
set(PROTOBUF_FOLDER ${PROJECT_SOURCE_DIR}/lib/protobuf-3.5.0)
set(CMAKE_PREFIX_PATH
${CMAKE_PREFIX_PATH}
"${PROTOBUF_FOLDER}/cmake/build/release/lib/x86_64-linux-gnu/cmake/protobuf"
)
find_package(Protobuf CONFIG REQUIRED)
message(STATUS "Using Protocol Buffers ${Protobuf_VERSION}")
catkin_package()
include_directories(include ${catkin_INCLUDE_DIRS} ${PROTOBUF_INCLUDE_DIRS})
add_library(addressbook_protobuf include/addressbook.pb.cc)
add_executable(main src/main.cpp)
target_link_libraries(main ${catkin_LIBRARIES} addressbook_protobuf ${PROTOBUF_LIBRARIES})
무엇이 누락 되었습니까? 로컬 설치를 언급하기 때문에 오류가 표시되지 않고 작동합니다. 그렇지 않니?
어떤 CMake 버전을 사용합니까? 스크립트'FindProtobuf.cmake'는 CMake와 함께 배송됩니다. 'Protobuf_VERSION' 변수를 설정하는 [스크립트] (https://cmake.org/cmake/help/v3.6/module/FindProtobuf.html)는 여러분이 사용하는 변수 대신'Protobuf_INCLUDE_DIRS'와'Protobuf_LIBRARIES' 변수를 설정합니다 : PROTOBUF_INCLUDE_DIRS' 및'PROTOBUF_LIBRARIES'를 포함합니다. – Tsyvarev
@Tsyvarev : 우분투 14.04 LTS PC에서 ROS Indigo를 사용하고 있습니다. 나는 ROS Indigo와 함께 배송되는'catkin_make'를 사용하고 있습니다. –
CMake 버전은 'CMakeLists.txt'에있는 [CMAKE_VERSION] (https://cmake.org/cmake/help/v3.7/variable/CMAKE_VERSION.html) 변수의 출력 값으로 확인할 수 있습니다. – Tsyvarev