2016-12-22 32 views
0

私はmain.cppファイルに含まれているヘッダファイルを自動的にコピーして実行可能ファイルを作成するはずです。そうしない。catkin_makeはcatkin_makeを実行したときに実行ファイルを作成して自動的にヘッダファイルをコピーすることができません

エラー:mqtt_pub_nodeが存在しない

Linking CXX executable /home/catkin_ws/devel/lib/mqtt_pub/mqtt_pub_node 
/usr/bin/ld: cannot find -lmosquitto.h 
collect2: error: ld returned 1 exit status 
make[2]: *** [/home/catkin_ws/devel/lib/mqtt_pub/mqtt_pub_node] Error 1 
make[1]: *** [mqtt_pub/CMakeFiles/mqtt_pub_node.dir/all] Error 2 
make: *** [all] Error 2 
Invoking "make -j1 -l1" failed 

注意。なぜ存在しないものを探しているのですか?自動的に作成する必要があります。私が知っていることから、実行可能ファイルはdevel/lib/mqtt_pubになければなりません。システムがmqtt_pub_node(ディレクトリ)についてどこで考えるのかはわかりません。 dir mqtt_pub_nodeを作成してヘッダファイルを置くと、catkin_makeは成功しますが、実行ファイルは作成されません。

[編集]ヘッダーファイルはdevel/includeにコピーする必要がありますが、catkin_wsにはそのようなディレクトリはありません。

Cmakelist

find_package(catkin REQUIRED COMPONENTS 
    roscpp 
    std_msgs 
) 

catkin_package(
    INCLUDE_DIRS include 
    LIBRARIES mqtt_pub 
    CATKIN_DEPENDS roscpp std_msgs 
    DEPENDS system_lib 
) 

include_directories(
    ${catkin_INCLUDE_DIRS} 
    /catkin_ws/src/mqtt_pub/include/mqtt_pub 
    include 
) 

link_directories(
    /catkin_ws/src/mqtt_pub/include/mqtt_pub 
) 

link_libraries(
    mosquitto.h 
) 

add_executable(mqtt_pub_node src/mqtt_publish.cpp) 
target_link_libraries(mqtt_pub_node ${catkin_LIBRARIES}) 

は、感謝の指導をお願い申し上げます!溶液から

[EDIT]エラーは、通常、link_directories(...)を必要としない尾状花でcassinaj

CMakeFiles/mqtt_pub_node.dir/src/mqtt_publish.cpp.o: In function `main': 
mqtt_publish.cpp:(.text+0x1f8): undefined reference to `mosquitto_lib_init' 
mqtt_publish.cpp:(.text+0x210): undefined reference to `mosquitto_new' 
mqtt_publish.cpp:(.text+0x237): undefined reference to `mosquitto_username_pw_set' 
mqtt_publish.cpp:(.text+0x259): undefined reference to `mosquitto_connect' 
mqtt_publish.cpp:(.text+0x285): undefined reference to `mosquitto_loop_start' 
mqtt_publish.cpp:(.text+0x2bc): undefined reference to `mosquitto_publish' 
mqtt_publish.cpp:(.text+0x2d0): undefined reference to `mosquitto_loop_stop' 
mqtt_publish.cpp:(.text+0x2df): undefined reference to `mosquitto_disconnect' 
mqtt_publish.cpp:(.text+0x2ee): undefined reference to `mosquitto_destroy' 
mqtt_publish.cpp:(.text+0x2f3): undefined reference to `mosquitto_lib_cleanup' 
collect2: error: ld returned 1 exit status 
make[2]: *** [/home/lorawan/catkin_ws/devel/lib/mqtt_pub/mqtt_pub_node] Error 1 
make[1]: *** [mqtt_pub/CMakeFiles/mqtt_pub_node.dir/all] Error 2 
make: *** [all] Error 2 
Invoking "make -j1 -l1" failed 

答えて

0

で与えたり、あなたの問題を引き起こしているlink_libraries(mosquitto.h)が必要です。後者の場合は、すべてのライブラリと実行ファイルをライブラリではなくヘッドファイルだけであるmosquitto.hというライブラリにリンクするようにcmakeに指示します。 次のことを試してみてください:これはあなたが実際にmqtt_pubという名前のライブラリを構築することが必要ですので、私はLIBRARIES mqtt_pub行をコメントアウト

find_package(catkin REQUIRED COMPONENTS 
    roscpp 
    std_msgs 
) 

catkin_package(
    INCLUDE_DIRS include 
    # LIBRARIES mqtt_pub 
    CATKIN_DEPENDS roscpp std_msgs 
) 

include_directories(
    ${catkin_INCLUDE_DIRS} 
    /catkin_ws/src/mqtt_pub/include/mqtt_pub 
    include 
) 

add_executable(mqtt_pub_node src/mqtt_publish.cpp) 
target_link_libraries(mqtt_pub_node ${catkin_LIBRARIES}) 

注意。

+0

こんにちは、お返事ありがとうございました:

は、私は私のcmakeのリストに次を追加しました!私の最初のCmakeファイルはあなたが提案したものでしたが、動作しませんでした。だから私は自分の問題を解決するための方法についてオンラインで研究しました。あなたの提案からの誤りです。 mosquitto.hヘッダファイルからの関数を参照することはできません。 – cechsterRK

+0

上記の質問 – cechsterRK

+0

にリンクしているライブラリがありません。モスキートはカトリーナパッケージですか?そうであれば、catkin依存関係として追加します。 CMakeLists.txtに自分自身で構築している場合は、 'target_link_libraries(mqtt_pub_node mosquitto $ {catkin_LIBRARIES})'のようなものを追加してください。 – cassinaj

0

解決済み。 Mosquittoを使うとき、CMakeListにクライアントライブラリをリンクしなければなりませんでした。基本的にクライアントライブラリであるlibmosquitto.soファイル。

set(Mosquitto_libs 
    /usr/lib/x86_64-linux-gnu/libmosquitto.so 
    /usr/lib/x86_64-linux-gnu/libmosquitto.so.1 
) 
target_link_libraries(mqtt_pub_node ${catkin_LIBRARIES} ${Mosquitto_libs}) 
+0

これはまさに以下の私のコメントで述べたことです: 'target_link_libraries(mqtt_pub_node mosquitto $ {catkin_LIBRARIES})' – cassinaj

関連する問題