【发布时间】:2010-09-09 18:51:33
【问题描述】:
所有,我找到了一条关于如何在python中调用c文件的资料,在这些例子中:有一个c文件,其中包含许多其他头文件,这个c文件的最开始是#include Python.h,然后我发现#include Python.h其实涉及到很多很多其他的头文件,比如pystate.h、object.h等等,所以我把需要的头文件都包含进去了。在 cpp IDE 环境中,它没有显示错误。 我要做的是在python中调用这个c代码,所以from ctypes import *,那么看来dll应该是由cl -LD test.c -test.dll之类的代码生成的,但是怎么用cl 在这种情况下?我使用了 cygwin:gcc,它运行良好。谁能帮我解决这个即:在python中调用C?我说清楚了吗?提前谢谢你!
好吧,现在我觉得告诉我我做了什么很重要:
我想达到的最终目标是:
我很懒,不想用python重写那些c代码,(在某些情况下这对我来说很复杂),所以我只想生成dll
python可以调用的文件。我按照googleing“python call c”给出的一个例子,这个例子中有两个版本:linux和windows:
例子test.c:
#include <windows.h>
BOOL APIENTRY
DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) {
return TRUE;
}
__declspec(dllexport) int
multiply(int num1, int num2) {
return num1 * num2;
}
两个版本: 1、linux下编译
gcc -c -fPIC test.c
gcc -shared test.o -o test.so
我在我的 vista 系统上的 cygwin 中做了这个,它工作正常; :)
2、windows下编译:
cl -LD test.c -test.dll
我在windows命令行提示符下使用了cl,不行!
这些是python代码:
from ctypes import *
import os
libtest = cdll.LoadLibrary(os.getcwd() + '/test.so')
print test.multiply(2, 2)
谁能试试这个并告诉我你得到了什么?谢谢!
【问题讨论】:
-
这真的和Python无关,你只是问如何在命令行上运行微软工具链的编译器。请考虑相应地标记您的问题。
-
@Jim:也许我应该补充一点:如何从 c 生成一个 dll 文件以便 python 可以调用它,就像在 windows 中一样,IDE 会发出烦人的噪音,这与代码本身无关跨度>
-
看,也许您真正的问题与您遇到的“噪音”有关,但是您已经自己提出了解决方案,即从命令行编译。相反,您可以询问如何配置您的 IDE 以消除这种噪音,或者,如果噪音以任何方式有意义。
标签: python c compiler-construction