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コマンド実行時のエラーは解決しました。
リファレンスちゃんと読めばハマらなかったんだけどなぁ・・・