Windows Python 是在 Microsoft Visual C++ 中构建的;使用其他编译器可能会也可能不会工作。本节的其余部分是针对 MSVC++ 的。
当在 Windows 中创建 DLL 时,你必须将 pythonXY.lib 传给链接器。 要编译两个 DLL,spam 和 ni (会使用 spam 中找到的 C 函数),你应当使用以下命令:
cl /LD /I/python/include spam.c ../libs/pythonXY.lib
cl /LD /I/python/include ni.c spam.lib ../libs/pythonXY.lib
第一条命令创建了三个文件: spam.obj, spam.dll 和 spam.lib。 Spam.dll 不包含任何 Python 函数 (例如 PyArg_ParseTuple()),但它通过 pythonXY.lib 可以知道如何找到所需的 Python 代码。
第二条命令创建了 ni.dll (以及 .obj 和 .lib),它知道如何从 spam 以及 Python 可执行文件中找到所需的函数。
不是每个标识符都会被导出到查找表。 如果你想要任何其他模块(包括 Python)都能看到你的标识符,你必须写上 _declspec(dllexport),就如在 void _declspec(dllexport) initspam(void) 或 PyObject _declspec(dllexport) *NiGetSpamData(void) 中一样。
Developer Studio 会添加很多你并不真正需要的导入库,命名你的可执行文件大小增加约 100K。 要摆脱它们,请使用项目设置对话框中的链接选项卡指定 忽略默认库。 将正确的 msvcrtxx.lib 添加到库列表中。 |