2017-06-15 2 views
0

こんにちは私はBoostのCmakeListと依存関係に問題があります。私のCmakeListは次のようになります:CmakeListのBoostライブラリのトラブルシューティング

cmake_minimum_required(VERSION 2.8.3) 
project(cpp_arm) 

add_compile_options(-std=c++11) 

find_package(catkin REQUIRED COMPONENTS 
    moveit_core 
) 

find_package(Boost REQUIRED COMPONENTS 
    system 
    filesystem 
    date_time 
    thread 
) 

catkin_package() 

include_directories(${catkin_INCLUDE_DIRS}) 
include_directories(SYSTEM ${Boost_INCLUDE_DIRS}) 

add_executable(hello_world src/hello_world.cpp) 
add_executable(test_arm src/test_arm.cpp) 

target_link_libraries(cpp_arm ${Boost_LIBRARIES}) 


install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 
    PATTERN "setup_assistant.launch" EXCLUDE) 
install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) 

最初に私はcatkin_makeを完了できなかったこの問題を抱えていました。私は、次のコードを持っていなかった:これは私に次のエラーました

target_link_libraries(cpp_arm ${Boost_LIBRARIES}) 

:そのエラーを検索した後

CMakeFiles/test_arm.dir/src/test_arm.cpp.o: In function `_GLOBAL__sub_I_main': 
test_arm.cpp:(.text.startup+0x43): undefined reference to `boost::system::generic_category()' 
test_arm.cpp:(.text.startup+0x48): undefined reference to `boost::system::generic_category()' 
test_arm.cpp:(.text.startup+0x4d): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

を私はあなたがリンクする必要があると言って(スタックに)この上でさまざまなトピックを見つけましたcmakelistのboostライブラリがcmakeに "見つけさせる"ようにしました。私は自分のコードに示す(従って述べたトピックに記載されている構文に)としてということでしたが、これは新しいエラーが発生:

CMake Error at cpp_arm/CMakeLists.txt:25 (target_link_libraries): 
    Cannot specify link libraries for target "cpp_arm" which is not built by 
    this project. 

私は主にリンクライブラリの構文を言ってトピックを見て、そのエラーを見上げたとき問題は、私の構文が解決策としてトピックで言及されたものと同じであるということです。

なぜこのエラーが発生し、これを解決するにはどうすればよいですか?事前に

おかげ

編集:私は私のプロジェクトが実際にあるかについていくつかの混乱がある参照してください。私は、私のcatkin_workspaceにROSのパッケージを生成するMoveITセットアップアシスタントによって作成されたROSパッケージを実行しています。このワークスペースの中で、私のパッケージフォルダの名前はcpp_armです。このパッケージ/フォルダの中に私のCmakeListがあり、このフォルダの中にはのsrcがあり、単純なC++ファイル(test_arm.cpp)を含んでいます。私はUbuntuのadd_libraryadd_executableで作成したターゲットの16.04

+0

あなたはクロスコンパイルしていますか?またはあなたのdevマシンのARMですか? 'cpp_arm'は赤いニシンですか? – sehe

答えて

2

target_link_libraries作品にROS運動のバージョンを実行しています

#include <moveit/move_group_interface/move_group_interface.h> 

main() 
{ 

} 

このCPPファイルには、次のようになりますcpp_armプロジェクトの名前ですが、この名前で作成されたターゲットはありません。ところで

add_executable(test_arm src/test_arm.cpp) 

target_link_libraries(test_arm ${Boost_LIBRARIES}) 

、代わりに:このような何か:

add_executable(cpp_arm ...) 
target_link_libraries(cpp_arm ${Boost_LIBRARIES}) 

しかし、私はあなたが達成しようとしているものと思いtest_armをリンクすることがよりある

add_compile_options(-std=c++11) 

CMakeは、選択した標準に従ってコンパイルオプションを処理します。

set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_CXX_STANDARD_REQUIRED ON) 

compile featuresも参照してください。

+0

ありがとう、これは確かに "問題"でした。 –

関連する問題