Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的Python+;:未解决的外部问题 我尝试在我的C++应用程序中嵌入Python,但是链接器一直在说这个错误: [ILINK32 Error] Error: Unresolved external '_PyModule_Create2TraceRefs' referenced from E:\CPP PROJECTS\ANDERLICHT\WIN32\DEBUG\ANDERLICHT.OBJ_C++_Python_Embedding - Fatal编程技术网

C+中的Python+;:未解决的外部问题 我尝试在我的C++应用程序中嵌入Python,但是链接器一直在说这个错误: [ILINK32 Error] Error: Unresolved external '_PyModule_Create2TraceRefs' referenced from E:\CPP PROJECTS\ANDERLICHT\WIN32\DEBUG\ANDERLICHT.OBJ

C+中的Python+;:未解决的外部问题 我尝试在我的C++应用程序中嵌入Python,但是链接器一直在说这个错误: [ILINK32 Error] Error: Unresolved external '_PyModule_Create2TraceRefs' referenced from E:\CPP PROJECTS\ANDERLICHT\WIN32\DEBUG\ANDERLICHT.OBJ,c++,python,embedding,C++,Python,Embedding,我使用的是NavaCabo C++ Cuilder XE2,所以我用PothOn3FLI.exe .< /P>转换了Python 33.LIB。 这是我在main.cpp中的代码: #include "anderlicht.c" #pragma comment(lib, "python33_omf.lib") // In main(): PyImport_AppendInittab("anderlicht",PyInit_anderlicht); Py_SetProgramName(progr

我使用的是NavaCabo C++ Cuilder XE2,所以我用PothOn3FLI.exe .< /P>转换了Python 33.LIB。 这是我在main.cpp中的代码:

#include "anderlicht.c"
#pragma comment(lib, "python33_omf.lib")

// In main():
PyImport_AppendInittab("anderlicht",PyInit_anderlicht);
Py_SetProgramName(programName.w_str());
Py_Initialize();

c中包含Python.h。要修复此错误,我必须做些什么?

问题很可能是您在构建代码时使用的编译器标志与在构建Python DLL时使用的编译器标志不同。特别是,<>代码> PyMeuleSeCurdi2TraceFEs只定义为如果您有<代码> -dPyTraceErrFEs> /COD>(通常通过<代码> ExtUniCfFLAGs<代码> >在UNIX上的<代码/>代码>命令;我不知道如何在Windows上使用ActuCabeRo C++ + Builder来实现它。通常,这不是特别定义的,如果您使用的是来自预构建Python二进制文件的DLL,则不会对其进行定义

因此,如果希望在构建代码时使用自定义标志,则需要使用相同的标志重新构建Python本身。否则,您需要获取用于构建Python的标志,并在构建代码时使用相同的标志


在Unix上,这很简单:只需调用
python3.3-config--cflags
python3.3-config--ldflags
,即可获得要传递到编译和链接步骤的标志。在Windows上,它不那么琐碎。文档中的这一章解释了当您使用与构建Python本身相同的工具链(通常是MSVC)时如何执行此操作,如果您使用mingw及其MSVC compat功能,其他地方有关于如何执行此操作的文档……但是如果您使用的是不同的工具链,你需要自己解决一些问题。

我也有同样的问题,但我找到了一个不需要重建的解决方案

如果您正在开发一个新的应用程序,您将处于调试模式:编译器定义_debug。在文件“pyconfig.h”(Python3.6.3的第336行附近)中,您可以找到:

#ifdef _DEBUG
#define Py_DEBUG
#endif
=>删除此代码。

如果保留该代码,则处于Py_调试模式,因此在object.h中会触发以下操作:

#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
#define Py_TRACE_REFS
#endif
modsupport.h中定义了此别名:

#ifdef Py_TRACE_REFS
 /* When we are tracing reference counts, rename module creation functions so
    modules compiled with incompatible settings will generate a
    link-time error. */
 #define PyModule_Create2 PyModule_Create2TraceRefs
 #define PyModule_FromDefAndSpec2 PyModule_FromDefAndSpec2TraceRefs
#endif
因此,编译器需要一个自定义版本的Python


现在,请欣赏您的标准嵌入式python。

您需要向我们提供更多信息:python33.dll、python33.lib和python.h是从哪里获得的?如果是你自己造的,你是怎么造的?您的项目的编译和链接设置是什么?