我正试图让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'
有人对我应该如何解决这个问题有任何建议吗?
答案 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
,如果这确实是您的目标。