日記(2022年3月20日)

Sun Mar 20 15:10:05 JST 2022 (modified: Sun Mar 20 16:52:15 JST 2022)
views: 4599, keywords:日記, ROS, CMake この記事は最終更新日が2年以上前のものです。

 本日は細々としたタスクを片付けて、その後、自己位置推定のemclパッケージが混乱していたので整理。

catkin_makeのときに同じ名前のクラスが複数あってbuildできないとき

 emclの分離作業を進めていたら、catkin_makeが「(emclとemcl2に)同じ名前のクラスがある」と言ってエラーを吐きました。

CMake Error at emcl2/CMakeLists.txt:18 (add_library):
     add_library cannot create target "Mcl" because another target with the same
     name already exists.  The existing target is a shared library created in
     source directory "/home/ueda/catkin_ws/src/emcl".  See documentation for
     policy CMP0002 for more details.

C++のコードでnamespaceを分けておけば大丈夫かと思ってたらどうやらそれではダメらしく、次のリンクのようにCMakeLists.txtadd_librarytarget_link_librariesを変更しなければならないと分かりました。add_libraryの最初の引数の名前をユニークなものにしなければならないようです。

https://github.com/ryuichiueda/emcl2/commit/8b9919352e0951185df451d5a33be6a041c0bbdc#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20a

例えば上のリンクの例では、add_library(Mcl src/Mcl.cpp)Mcladd_library(Mcl_emcl2 src/Mcl.cpp)というように、Mcl_emcl2という固有の名前に変更しています。target_link_librariesでは、add_libraryでつけた名前で当該のライブラリ(というよりはsrc/Mcl.cppをコンパイルしたオブジェクト?)を参照します。

 さらにTwitterで、元研究室メンバーのたいりょー氏から情報いただきました。他のパッケージと切り離す設定もできるとのこと。

ただ、ライブラリ名はユニークに、というルールは悪くないと思うので、とりあえず上記の方法を選択ということで・・・。ありがとうございます。

 本まで書いてるのに、ここらへんグダグダで大変申し訳なく・・・。

シェル・ワンライナー160本ノック増刷

 ROSだけでなく、シェルについても本まで書いているのにさっぱり分からんと日々悩んでますが、第4刷が出ます!

シェルさっぱり分からんけど出るものは仕方ない。よろしくお願いいたしまーす。

縦の猫動画が人気

 48時間で2000viewsいきそうです。

こっちのほうが面白いと思うんですが・・・、かなり前からアップされているのに抜かれました。やっぱり縦長のショート動画だとよさげ・・・。

昔の猫動画を縦長に編集してアップしてみるか・・・。

その他

 今日はなぜかいろいろ仕事が進んで、マンションのある会から依頼されていたポスターを完成させて提出。なぜか明日(祝日なんですけど)を締め切りにご指定いただいた報告書も完成。明日はなにをしよう・・・。

以上です。

ノート   このエントリーをはてなブックマークに追加 
 

prev:jus共催 第58回シェル芸勉強会リンク集 next:日記(2022年3月21日)

やり散らかし一覧

記事いろいろ