yam’s Lab

ハマったこと、学んだことを備忘録として記事にします。主にC++,Qt,ROS,Pythonについて取り扱います。

C++からPythonを呼び出す時、環境構築でハマった

題名の通り、makeコマンドを使っての環境構築でハマったので対処法を記載します。

環境は以下です。
OS:ubuntu 18.04
Python:3.6.8

現象

C++からpythonを呼び出す場合、C++のコードの先頭でPython.hというファイルをインクルードする必要があり、安直にPython.hの場所を調べmakefileにそのパスを記載しました。
すると、makeコマンド実行時に以下のメッセージが出ました。

make python undefined reference to py_initialize'

ソースコード内に記載したPy_Initializeが見つからない・・・
そりゃヘッダーファイルインクルードしただけでsoファイルとか読めてないから仕方ないですよね。。。

対処法

下記リファレンスに記載ありますが、unix系のOSで推奨されるコンパイルオプション、リンクオプションを調べられます。
1. 他のアプリケーションへの Python の埋め込み — Python 3.8.2 ドキュメント

これに従って、オプションを調べます。
推奨されるコンパイルオプション

$ /opt/bin/python3.6-config --cflags

推奨されるリンクオプション

$ /opt/bin/python3.6-config --ldflags

makefileのCFLAGにコンパイルオプションを、LDFLAGSにリンクオプションを追加すればmakeコマンド実行時のエラーは解決しました。

リファレンスちゃんと読めばハマらなかったんだけどなぁ・・・