Pybind11错误未定义对`Py_GetVersion'的引用

时间:2018-10-09 19:28:30

标签: c++ pybind11

我正试图让Pybind 11正常工作,并且正在挣扎。我试图使用以下命令编译.cpp文件:

c++  -Wall -std=c++11 -fPIC `python3 -m --includes` -I ~/Documents/Single_electron/pybind11/include single_e.cpp -o single_e `python-config --includes`

但是从此列表开始,会出现很多错误:

 single_e.cpp :(.text+0xaa): undefined reference to `Py_GetVersion'
 single_e.cpp :(.text+0x104): undefined reference to `PyExc_ImportError'
 single_e.cpp :(.text+0x123): undefined reference to `PyErr_Format'
 single_e.cpp :(.text+0x1b2): undefined reference to `PyExc_ImportError'
 single_e.cpp :(.text+0x1c0): undefined reference to `PyErr_SetString'
 single_e.cpp :(.text+0x1f9): undefined reference to `PyExc_ImportError'
 single_e.cpp :(.text+0x207): undefined reference to `PyErr_SetString'

有人对我应该如何解决这个问题有任何建议吗?

1 个答案:

答案 0 :(得分:1)

您将python包含多种方式

python3 -m --includes

python-config --includes

第一个甚至不应该运行(您是说python3-config --includes吗?),无论如何,您都需要决定要使用python2还是python3,并且只使用其中一个。

第二,您只处理了python的包含目录。您仍然需要告诉编译器如何链接库,这是问题的核心。那是对python-config的另一个调用:python-config --ldflags

最后,最好使用--cflags来获取include目录,因为这还将设置许多其他标志,以使编译后的代码符合python的约定。例如,其中包括-fPIC

因此,总结一下:

c++ -std=c++11 `python-config --cflags` -I ~/Documents/Single_electron/pybind11/include single_e.cpp -o single_e `python-config --ldflags`

当然可以用您的python-config的正确名称代替,例如python3-config,如果这确实是您的目标。