英特尔编译器与Python/ctypes/libffi
我在用Intel编译器(11.1)构建一个可以用ctypes的Python版本时遇到了麻烦。问题在于,ctypes模块下的libffi在与OpenGL等进行交互时工作不正常。
最开始,libffi在使用Intel编译器时无法编译,因为__int128_t
这个类型没有定义。我按照网上几个地方提到的解决办法,定义了一个新的类型:
typedef struct { int64_t m[2]; } __int128_t;
这个做法是根据Intel的一个回复来的:http://software.intel.com/en-us/forums/showthread.php?t=56652
补丁建议的内容大致是这样的:
typedef struct { int64_t m[2]; } __int128_t;
//and then change where the uint64_t is assigned to this to be:
sse[x].m[0] = *(uint64_t*) v;
sse[x].m[1] = 0;
//and where the uint32_t is assigned to:
sse[x].m[0] = *(uint32_t*) v;
sse[x].m[1] = 0;
应用这个补丁后,编译可以通过了,ctypes
也可以导入了,但是在与OpenGL交互时,情况就不太对了。运行PyQt的示例程序hellogl.py
时,结果是一个空白的视图。
有没有更好的、可行的方法呢?
Dan;
1 个回答
3
我是libffi的作者。我建议你给libffi-discuss@sourceware.org发一封邮件,把所有的细节都写上。同时,我也建议你在用英特尔编译器构建的libffi上运行libffi的测试套件。确保把测试结果发给libffi-discuss@sourceware.org,这样我们就能帮你找出问题所在。