0

C++ アプリケーションに Python を埋め込もうとしましたが、リンカーは次のエラーを繰り返します。

[ILINK32 Error] Error: Unresolved external '_PyModule_Create2TraceRefs' referenced from E:\CPP PROJECTS\ANDERLICHT\WIN32\DEBUG\ANDERLICHT.OBJ

Embarcadero C++ Builder XE2 を使用しているため、python33.lib を coff2omf.exe で変換しました。

これは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();

anderlicht.c には Python.h が含まれています。このエラーを修正するにはどうすればよいですか?

4

2 に答える 2

0

この問題は、Python DLL のビルドに使用したものとは異なるコンパイラ フラグをコードのビルドに使用している可能性が最も高いです。特に、PyModule_Create2TraceRefsは、持っている場合にのみ定義されます-DPy_TRACE_REFS(通常、UnixEXTRA_CFLAGSのコマンドで経由で渡されmakeます。Windows の Embarcadero C++ Builder でそれを行う方法がわかりません)。通常、これは定義されていません。特に、ビルド前の Python バイナリの DLL を使用している場合は、定義されていません。

したがって、コードをビルドする際にカスタム フラグが必要な場合は、同じフラグを使用して Python 自体を再構築する必要があります。それ以外の場合は、Python のビルドに使用されたフラグを取得し、コードのビルド時に同じフラグを使用する必要があります。

python3.3-config --cflagsUnix では、これは簡単です。単にandを呼び出しpython3.3-config --ldflagsて、コンパイルおよびリンク ステップに渡すフラグを取得します。Windows では、それほど簡単ではありません。ドキュメントのWindows での C および C++ 拡張機能の構築 の章では、Python 自体 (通常は MSVC) の構築に使用されるのと同じツールチェーンを使用している場合の方法について説明しています。その方法については別の場所で説明していますが、別のツールチェーンを使用している場合は、その一部を自分で理解する必要があります。

于 2013-08-07T19:34:33.443 に答える