Protocol Buffersをローカルにインストールしました。以下はROSパッケージのディレクトリ構造です:ROS内にローカルにインストールされたプロトコルバッファを使用できません
.
├── CMakeLists.txt
├── package.xml
├── include
│ ├── addressbook.pb.cc
│ ├── addressbook.pb.h
│ └── addressbook.proto
├── lib
│ └── protobuf-3.5.0
└── src
└── main.cpp
Protocol Buffersは./configure --prefix=$PWD
lib/protobuf-3.5.0
内のディレクトリを使用して、ローカルにインストールされました。
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:私はUbuntu 14.04 LTS PCでROS Indigoを使用しています。私は 'catkin_make'を使用しています。これはROSインディゴと共に出荷されています。 –
CMakeのバージョンは、CMakeLists.txtの[CMAKE_VERSION](https://cmake.org/cmake/help/v3.7/variable/CMAKE_VERSION.html)変数の出力値で確認できます。 – Tsyvarev