2020/05/23

ROSでcatkin_makeする際にundefined referenceが出る原因まとめ

背景


ROS melodicでOSSパッケージを利用した開発を行う中で、make時にundefined reference to...(に対する定義されていない参照です)のエラーが発生する場合があったため、原因をまとめておく。

記事の目的


ROSのOSSパッケージを利用する際、make時にundefined reference to...のエラーが出る原因をまとめる

undefined reference


現象

GitHubでOSSのパッケージをcloneしてcatkin_makeする際、下記のようなエラーが出る場合がある
$ catkin_make ...
...
/opt/ros/melodic/lib/libtf.so: undefined reference to tf2_ros::TransformListener::TransformListener(tf2::BufferCore&, ros::NodeHandle const&, bool)'
collect2: error: ld returned 1 exit status
...

原因

原因として、下記が考えられる。
  • OSSパッケージのバージョン違い
  • rosには、ディストリビューション毎にバージョンが変更され、tfなどの標準パッケージの仕様が変更される場合がある。 よって、git cloneしたパッケージのバージョンが異なると、make時にエラーとなる場合がある。

対処方法

  • OSSパッケージのバージョン違い
  • OSSパッケージのgitブランチを確認し、バージョンを合わせる
    1. ブランチを確認する
    2. $ cd < OSSパッケージののルートディレクトリ >
      $ git branch
      noetic-devel # ros noetic用のブランチ
    3. ブランチを変更する
    4. $ git checkout <現在のROSのブランチ>
      <現在のROSのブランチ>

まとめ


  • ROSのOSSパッケージを利用する際、make時にundefined reference to...のエラーが出る原因をまとめた


参考文献




変更履歴


  1. 2020/05/23: 新規作成

0 件のコメント:

コメントを投稿

MQTTの導入

背景 IoTデバイスの接続環境構築のため、MQTT(mosquitto)の導入を行った。 記事の目的 MQTT(mosquitto)をUbuntuに導入する mosquitto ここではmosquittoについて記載する。 MQTT MQTT(Message Qu...