pybind11を使用して、Pythonインタープリターが埋め込まれたCPPファイルをビルドして実行する方法を見つけようとしています。
このチュートリアルから、CMakeを使用していますが、CMakeなしでこれを行う方法を探しています。
これが私が試したことです。
ではexample.cpp:
#include <pybind11/embed.h> // everything needed for embedding
namespace py = pybind11;
int main() {
py::scoped_interpreter guard{}; // start the interpreter and keep it alive
py::print("Hello, World!"); // use the Python API
}
そして、私が以下を実行すると、ターミナルで:(正常にビルドされます)
c++ -O3 -Wall -std=c++11 -undefined dynamic_lookup `python3 -m pybind11 --includes` example.cpp -o example
そして、バイナリを実行します
./example
次のエラーが発生します。
dyld:シンボルが見つかりません:_PyBaseObject_Type参照元:/ Users / cuinjune / Desktop / pybindtest /./ example予期される場所:/ Users / cuinjune / Desktop / pybindtest /./ exampleのフラット名前空間zsh:abort ./example
pybind11を使用して、埋め込まれたPythonインタープリターでcppファイルを適切にビルドして実行する方法はありますか?(CMakeを使用せずに)
そのシンボル(および必要なもの)を定義するPythonライブラリとリンクします。
標準インストールを想定すると、それは追加するだけです。
`-lpython`
CLIに(または-lpython3
、システムに複数のPythonライブラリが存在する場合など)。代わりに次を追加することもできます。
`python3-config --libs`
Python3がpython3-config
インストールされている場合。
編集:コメントに基づいて、関連するライブラリディレクトリはセットアップのリンカで利用できません。1つのオプションは、代わりにフラグの完全なセットを使用することです。
`python3-config --ldflags`
私はまだそれがpython3-config
あなたと一致すると仮定していますpython3
。そうでない場合、代替手段はディレクトリdistutilsを取得することです。インストールの前に-L
追加して追加する-lpython
か-lpython3
、インストールに応じて:
-L`python3 -c 'import distutils.sysconfig as ds; print(ds.get_config_var("LIBDIR"))'` -lpython
(もちろん、「LDFLAGS」config_varもありますが、これらはPythonを構築するためのフラグであり、必要なものではない可能性があります。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加