未解析的外部符号构建 Python 模块
Unresolved external symbol building Python module
我终于开始将Python集成到我的程序中了;我已经取得了很好的进展,但我已经(希望)遇到了最后一个障碍。我有以下代码(在python_mgr.cpp
内):
void say_hello(const char* name)
{
std::cout << "Hello, " << name << "!" << std::endl;
}
BOOST_PYTHON_MODULE(hello)
{
def("say_hello", say_hello);
};
这工作得很好,我能够构建一个hello.pyd
文件并将其导入要使用的程序中。但是,如果我将say_hello
的内容更改为其他内容,例如:
void say_hello(const char* name)
{
mandala::app.exit();
}
我从setup.py
得到以下输出:
running build
running build_ext
building 'hello' extension
C:Program Files (x86)Microsoft Visual Studio 12.0VCBINcl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IC:boost_1_55_0 -I..extglm-0.9.4.4 -IC:Python27include -IC:Python27PC /Tp../mandala/python_mgr.cpp /Fobuildtemp.win32-2.7Release../mandala/python_mgr.obj
python_mgr.cpp
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDExlocale(337) : warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
c:python27includepymath.h(22) : warning C4273: 'round' : inconsistent dll linkage
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDEmath.h(516) : see previous definition of 'round'
C:Program Files (x86)Microsoft Visual Studio 12.0VCBINlink.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:boost_1_55_0stagelib /LIBPATH:C:Python27libs /LIBPATH:C:Python27PCbuild /EXPORT:inithello buildtemp.win32-2.7Release../mandala/python_mgr.obj /OUT:buildlib.win32-2.7hello.pyd /IMPLIB:buildtemp.win32-2.7Release../mandalahello.lib /MANIFESTFILE:buildtemp.win32-2.7Release../mandalahello.pyd.manifest
Creating library buildtemp.win32-2.7Release../mandalahello.lib and object buildtemp.win32-2.7Release../mandalahello.exp
python_mgr.obj : error LNK2019: unresolved external symbol "public: void __thiscall mandala::app_t::exit(void)" (?exit@app_t@mandala@@QAEXXZ) referenced in function __catch$?exec@python_mgr_t@mandala@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z$0
python_mgr.obj : error LNK2019: unresolved external symbol "struct mandala::app_t mandala::app" (?app@mandala@@3Uapp_t@1@A) referenced in function __catch$?exec@python_mgr_t@mandala@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z$0
buildlib.win32-2.7hello.pyd : fatal error LNK1120: 2 unresolved externals
Press any key to continue . . .
我不知道如何解决这个问题或为什么会发生错误。作为参考,这是我setup.py
脚本:
from distutils.core import setup
from distutils.extension import Extension
setup(name='mandala',
ext_modules=[
Extension('hello', ['../mandala/python_mgr.cpp'],
include_dirs=['C:\boost_1_55_0', '..extglm-0.9.4.4'],
library_dirs=['C:\boost_1_55_0stagelib'])
])
提前感谢您的任何帮助!
您收到链接器错误,抱怨:
public: void __thiscall mandala::app_t::exit(void)
这是你的这个类指针,"mandala::app"结构和退出函数。
struct mandala::app_t mandala::app
这意味着你编译的目标文件或"模块",python_mgr.obj
,你编译了,不识别这个,曼陀罗,应用程序或出口是什么,
this->mandala::app.exit();
因为它不包含此类的编译代码、"app"结构和相应的"exit"调用。(请注意,在您的情况下,this 调用是隐式的,但仍在使用。
您需要将它们添加到模块中或将它们编译为单独的模块并链接它。
相关文章:
- 如何构建一个 setup.py 来编译C++使用 Python、pybind11 和 Mingw-w64 的扩展?
- 为 Python 构建共享库C++时出现分段错误
- 在Visual Studio 2017中使用c ++组件构建python解决方案时出现问题
- 通过 cmake 从C++扩展构建 Python 子模块
- 静态提升 Python 构建
- 在使用 cmake 和 pybind11 构建示例应用程序时找不到 Python.h
- 使用 python3 为 msvc 构建 boost python - 链接器错误
- 无法构建Boost Python库(致命错误:PyConfig.H:没有此类文件或目录)
- QUANTLIB 1.9构建Python时致命错误
- 构建 Python C++扩展
- 使用boost构建Python扩展
- 使用自定义模块构建 python 解释器时出现问题
- 通过增强构建构建Python扩展
- 未解析的外部符号构建 Python 模块
- 在重载函数上构建Python C++扩展失败
- Cython是用于构建C代码还是用于构建Python扩展?
- vsvars32.bat丢失,试图用Nuitka构建Python程序时出错
- 构建python时b2和./bootstrap.sh 有什么区别
- 使用boost.python构建Python扩展时出错
- 用Homebrew在Mac OS X上构建python boost hello world-Makefile vs.Re