英特尔编译器与Python/ctypes/libffi

1 投票
1 回答
1083 浏览
提问于 2025-04-16 02:54

我在用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,这样我们就能帮你找出问题所在。

撰写回答