【ros_problems】コンパイルvelodyne_poiontcloudヒントyaml-cppエラー解決方法
【ros_problems】コンパイルvelodyne_poiontcloudヒントyaml-cppエラー解決方法
最近Velodyneをテストし、GitHubから最新のvelodyneをソースコードにインストールしました.poiontcloudパッケージは、yaml-cppに依存し、GitHubから見つけることができ、ダウンロード後にCmakeでコンパイルしてインストールします.
コンパイルvelodyne_poiontcloudでエラーが発生しました.次のプロンプトが表示されます.
/usr/bin/ld:/usr/local/lib/libyaml-cpp.a(memory.cpp.o): relocation R_X86_64_32 against `.rodata’ can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libyaml-cpp.a: error adding symbols: Bad value collect2: error: ld returned 1 exit status make[2]: * [/home/vance/velodyne_ws/devel/lib/libvelodyne_rawdata.so] Error 1 make[1]: * [velodyne/velodyne_pointcloud/src/lib/CMakeFiles/velodyne_rawdata.dir/all] Error 2 make: * [all] Error 2 Invoking “make -j4 -l4” failed
これはvelodyne_poiontcloudはyaml-cppの共有ライブラリ(ダイナミックライブラリと呼ばれるlibyaml-cpp.soというファイルもあり、一般的に/usr/local/lib/の下にインストールされています)を呼び出しますが、私はyaml-cppの静的ライブラリ(libyaml-cpp.aというファイル)しかありません.
なぜならyaml-cppをコンパイルするときに共有ライブラリのコンパイルを選択しなかったため、デフォルトのコンパイルは静的ライブラリを生成します.READMEファイルを参照して、
-DBUILD_SHARED_LIBS=ON
パラメータを使用してコンパイルします.Run CMake. The basic syntax is: cmake [-G generator] [-DBUILD_SHARED_LIBS=ON|OFF] .. . yaml-cpp defaults to building a static library, but you may build a shared library by specifying
-DBUILD_SHARED_LIBS=ON
. インストールyaml-cppを再コンパイルすると、次のことが解決されます.
cd [build path of yaml-cpp]
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install