概要
ROS 2 JazzyをFedora 41でソースビルドした際の手順・ポイントをまとめます。 /
This article summarizes the steps and tips for building ROS 2 Jazzy from source on Fedora 41.
公式ドキュメント:RHEL DevelopmentSetup
を見ながらビルドしたのですが、Fedora 41デフォルト環境のままでは途中でビルドエラーが発生したので、Pythonのバージョン調整などを行いました。
同じ環境で困っている方の参考になれば幸いです。
環境 / Environment
| 項目 / Item | バージョン / Version |
|---|---|
| OS | Fedora 41 (x86_64) |
| ROS 2 | Jazzy (from source) |
| Python | 3.10.14 |
| gcc / g++ | gcc (GCC) 14.3.1 20250808 (Red Hat 14.3.1-3) |
| cmake | 3.30.8 |
| colcon-core | 0.20.0 |
発生したビルドエラーと行った対策 / Build Errors and Solutions
| 番号 / No. | ビルドエラー / Error | 対策 / Solution |
|---|---|---|
| 1 | sipconfigが使えない / sipconfig not available | Pythonを3.13から3.10に変更 / Downgrade Python 3.13 → 3.10 |
| 2 | py::hash(py::self) の宣言が正しくない / py::hash(py::self) declaration incorrect | buildフォルダ以下のソースを手作業で修正 / Comment out auto-generated code in build folder |
| 3 | RPM_ARCHなどの環境変数未定義 / Undefined RPM_ARCH environment variable | シェルで手動定義 / Define manually in shell |
1. sipconfigが使えない / sipconfig not available
Fedora 41 デフォルトの Python は 3.13 でした。
$ python3 --version
Python 3.13.7
ROS 2 Jazzy は sipconfig を使用していますが、Python3.13 では廃止されているためエラーが発生します。
そのため、ビルド用 Python を 3.10.14 に変更しました。
2. py::hash(py::self) の宣言が正しくない / py::hash(py::self) declaration incorrect
ROS 2 Jazzyビルド環境が自動生成するコードの一部「C++がhash()関数をPython向けに公開する宣言」が、Fedora41ビルド環境のチェック基準では誤りであるため、ビルドエラーが発生しました。
ビルドエラー対策として、自動生成されたソースの一部を手でコメントアウトしました。
コメントアウトして問題無いと判断した理由は後述します。
修正対象 / Target files
ros2_jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/framevel.cpp
//frame_vel.def(py::hash(py::self));
//double_vel.def(py::hash(py::self));
//vector_vel.def(py::hash(py::self));
//twist_vel.def(py::hash(py::self));
//rotation_vel.def(py::hash(py::self));
ros2_jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp
//frame.def(py::hash(py::self));
//vector.def(py::hash(py::self));
//wrench.def(py::hash(py::self));
//twist.def(py::hash(py::self));
//rotation.def(py::hash(py::self));
コメントアウトして問題無いと判断した理由 / Reason it's safe
ROS 2 Jazzyビルド用ディレクトリで以下のgrepコマンドを実行し、検索結果が無しだったため、「C++がhash()関数をPython向けに公開する宣言」を削除しても、Pythonで呼んでいる箇所が無いため削除しても問題無いと判断しました。
$ grep -R --include='*.py' "hash(PyKDL" src/
3. RPM_ARCHなどの環境変数未定義 / Undefined RPM_ARCH
Fedora では RPM パッケージ作成用の環境変数が未定義の場合があります。
ビルドシェルで以下を設定すると回避できます。
export RPM_ARCH=$(uname -m)
export RPM_PACKAGE_RELEASE=1
export RPM_PACKAGE_VERSION=1.0
export RPM_PACKAGE_NAME=qt_gui_cpp
Ubuntu では最初から定義済みの場合があるようです。
まとめ / Summary
- Fedora 41 + ROS 2 Jazzy + Python3.10 + GCC14 でのソースビルド向けの注意点を整理しました。
-
py::hash(py::self)のコメントアウトは Python 側で未使用なため安全です。 - Python バージョンや環境変数の調整を行えば、ソースビルドは問題なく完了します。