

現在、Ubuntu
18.04上で、melodicを使用して、ROSのテストプログラム開発をはじめまして、まだ初心者ですがGoogleを検索しながら進めております。他者から参考となるプログラムを(C++)を入手しそれに追加でshm_open()関数を追加して共有メモリでGUIアプリと連携しようとしています。ですが、catkin_makeで下記のエラーが出てしまいます。Includeは通っているので多分、target_link_librariesで失敗しているものと想定しております。

[code]

    [ 96%] Built target img_node
    /usr/bin/ld: CMakeFiles/parking_control.dir/src/parking_control.cpp.o: シンボル 'shm_open@@GLIBC_2.2.5' への未定義参照です
    //lib/x86_64-linux-gnu/librt.so.1: error adding symbols: DSO missing from command line
    collect2: error: ld returned 1 exit status
    carrier/carrier_parking/CMakeFiles/parking_control.dir/build.make:495: recipe for target '/home/texeng/catkin_ws/devel/lib/carrier_parking/parking_control' failed
    make[2]: *** [/home/texeng/catkin_ws/devel/lib/carrier_parking/parking_control] Error 1
    CMakeFiles/Makefile2:6774: recipe for target 'carrier/carrier_parking/CMakeFiles/parking_control.dir/all' failed
    make[1]: *** [carrier/carrier_parking/CMakeFiles/parking_control.dir/all] Error 2
    Makefile:140: recipe for target 'all' failed
    make: *** [all] Error 2
    Invoking "make -j8 -l8" failed
    
[/code]

このshm_open()をリンクさせる方法についてご教授をお願いできませんでしょうか？  
素のソースコードをコンパイルする場合は、"g++ -o myshm mushm.cpp
-lrt"でコンパイル出来ており、このコンパイルオプション"-lrt"=RealtimeExtensions
libraryをROSのCMakeLists.txtでどう書いたら良いか分かりません。お手数をおかけしますが教えて頂きたくお願い致します。


CC BY-SA 4.0
2022-10-25T07:15:08.820
91806
2022-10-26T07:57:01.200
2022-10-25T22:22:29.600
3475
55020
question
c++ linux cmake
ROSでc++の共有メモリをリンクさせるには？


# オイラは `cmake` 素人なので間違ってたらごめん

<https://stackoverflow.com/questions/31147129/> によると `shm_open()` は `librt.a`
ないし `librt.so` にあるはずなので

[code]

    TARGET_LINK_LIBRARIES(my_app ${Boost_LIBRARIES} rt)
    
[/code]

のように `rt` を `target_link_libraries` の末尾に追加で行けるとのこと。

うん？ということは `add_library` のほうがかっこいいのではないか？（未テスト）


CC BY-SA 4.0
2022-10-26T02:15:58.850
91827
2022-10-26T02:15:58.850
8589
91806
answer


ご教授頂き誠にありがとうございます。  
rtを付けることで解決しました。  
target_link_libraries(my_app ${catkin_LIBRARIES} rt)  
以上です。


CC BY-SA 4.0
2022-10-26T07:57:01.200
91836
2022-10-26T07:57:01.200
55020
91806
answer