我正在尝试使用pybind11构建和运行一个包含Python解释器的cpp文件。
根据这个教程,它使用CMake,但我正在寻找一种无需使用CMake实现此目的的方法。
以下是我的尝试:
在example.cpp中:
在终端中运行以下命令:(成功构建)
我遇到了以下错误:
dyld:找不到符号:_PyBaseObject_Type 参考自: /Users/cuinjune/Desktop/pybindtest/./example 应在 /Users/cuinjune/Desktop/pybindtest/./example 的平面命名空间中 预期在zsh中中断的。/example 是否有可能使用pybind11嵌入Python解释器来正确构建和执行cpp文件?(而无需使用CMake)
#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中中断的。/example 是否有可能使用pybind11嵌入Python解释器来正确构建和执行cpp文件?(而无需使用CMake)
python3-config --libs
-lpythonpython3 -m pybind11 --includes
example.cpp -o example,但是我遇到了ld: library not found for -lpython3.7m
的错误。我也尝试了-lpython3.7m
,但是出现了相同的错误。 - Zack Leepython3 -m pybind11 --includes
example.cpp -o example 时,它可以成功构建,但是当我运行二进制文件时,会出现“dyld: Symbol not found: _PyInstanceMethod_Type”的错误提示。 - Zack LeePyInstanceMethod_Type
存在于3中,而不是2中)。 - Wim Lavrijsenpython3-config --ldflags
python3 -m pybind11 --includes
example.cpp -o example 已经成功运行。非常感谢! - Zack Leepython3-config
是一个程序,因此除非Xcode在shell上编译,否则不会运行)。通过在shell上运行python3-config --ldflags
来获取标志,然后将结果复制到“其他链接器标志”中。由于您不会分发Xcode构建环境,因此硬编码输出不应该是实际问题。 - Wim Lavrijsen