1

次のエラーが表示されます。

CMakeFiles/ndt_visualiser.dir/src/fromFile.o: In function `boost::filesystem3::path::codecvt()':
/usr/include/boost/filesystem/v3/path.hpp:377: undefined reference to `boost::filesystem3::path::wchar_t_codecvt_facet()'
CMakeFiles/ndt_visualiser.dir/src/fromFile.o: In function `directory_iterator':
/usr/include/boost/filesystem/v3/operations.hpp:594: undefined reference to `boost::filesystem3::detail::directory_iterator_construct(boost::filesystem3::directory_iterator&, boost::filesystem3::path const&, boost::system::error_code*)'
CMakeFiles/ndt_visualiser.dir/src/fromFile.o: In function `boost::filesystem3::path::codecvt()':
/usr/include/boost/filesystem/v3/path.hpp:377: undefined reference to `boost::filesystem3::path::wchar_t_codecvt_facet()'
CMakeFiles/ndt_visualiser.dir/src/fromFile.o: In function `path<boost::filesystem3::directory_entry>':
/usr/include/boost/filesystem/v3/path.hpp:134: undefined reference to `boost::filesystem3::path_traits::dispatch(boost::filesystem3::directory_entry const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::codecvt<wchar_t, char, __mbstate_t> const&)'
CMakeFiles/ndt_visualiser.dir/src/fromFile.o: In function `is_directory':
/usr/include/boost/filesystem/v3/operations.hpp:223: undefined reference to `boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)'
CMakeFiles/ndt_visualiser.dir/src/fromFile.o: In function `boost::iterator_facade<boost::filesystem3::directory_iterator, boost::filesystem3::directory_entry, boost::single_pass_traversal_tag, boost::filesystem3::directory_entry&, int>::operator++()':
/usr/include/boost/filesystem/v3/operations.hpp:630: undefined reference to `boost::filesystem3::detail::directory_iterator_increment(boost::filesystem3::directory_iterator&, boost::system::error_code*)'
CMakeFiles/ndt_visualiser.dir/src/fromFile.o: In function `boost::filesystem3::path::codecvt()':
/usr/include/boost/filesystem/v3/path.hpp:377: undefined reference to `boost::filesystem3::path::wchar_t_codecvt_facet()'
CMakeFiles/ndt_visualiser.dir/src/fromFile.o: In function `is_directory':
/usr/include/boost/filesystem/v3/operations.hpp:223: undefined reference to `boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)'
CMakeFiles/ndt_visualiser.dir/src/fromFile.o: In function `~dir_itr_imp':
/usr/include/boost/filesystem/v3/operations.hpp:563: undefined reference to `boost::filesystem3::detail::dir_itr_close(void*&, void*&)'
/usr/include/boost/filesystem/v3/operations.hpp:563: undefined reference to `boost::filesystem3::detail::dir_itr_close(void*&, void*&)'
CMakeFiles/ndt_visualiser.dir/src/fromFile.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'

同様のエラーを含むかなりの数の投稿を見てきました。ほとんどすべての投稿 ( Linux での Linking Boost Libraryなど) では、解決策は -lboost_filesystem および -lboost_system フラグを追加する必要があるようです。これらをlflagsまたはcflagsとしてmanifest.xmlに追加しようとしましたが、まったく何も変わりません。そして、パッケージの CMakeLists.txt に何かを追加しようとしましたが、間違っていたと思います。

アイデアはありますか?

4

2 に答える 2

3

次のような行を CMakeLists.txt に追加する必要があります。

rosbuild_add_boost_directories()
rosbuild_link_boost(ndt_visualizer filesystem system)

詳細については、 http://www.ros.org/wiki/rosbuild/CMakeLists#rosbuild_link_boostを参照してください。

マニフェストの lflags または cflags に行を追加すると、他のパッケージにリンクしているパッケージではなく、自分のパッケージにリンクしている他のパッケージに影響します。

将来的には、ROS に関する質問は、サポート ガイドラインに従ってROS Answersでより適切に尋ねられるようになります。

于 2012-08-05T05:20:52.697 に答える
0

ちょっとしたフォローアップとして、ファイルステータスとエラーコードに関連するものへの未定義の参照に問題がありました。

この問題は、ライブラリのリンクの順序付けで発生しました (少なくとも GCC では、「依存度の低い」ライブラリは「依存度の高い」ライブラリの後に続きます)。私のプロジェクトでは、Boost.Filesystem と yaml-cpp に依存するカスタム ライブラリを使用していました。以前は、ブースト ライブラリの後にカスタム ライブラリをリンクしていましたが、うまくいきませんでした。後でブーストがリンクされていることを確認して、修正する必要がありました。

rosbuild_add_boost_directories()
rosbuild_add_executable(${PROJECT_NAME} ${SRCS})
target_link_libraries(${PROJECT_NAME} custom_lib yaml-cpp)
rosbuild_link_boost(${PROJECT_NAME} filesystem system)
于 2012-10-16T03:00:02.620 に答える