使用CFFI从Python

时间:2016-12-05 12:12:40

标签: python openmp python-cffi

我正在使用CFFI从Python调用OpenMP的C函数。我的代码可以在我的一台计算机上运行,​​但不能在另一台计算机上运行。

import os
from cffi import FFI

# test 
os.system("gcc -fopenmp -c test.c -o test.o")
os.system("gcc -o test.exe test.o -fopenmp")
os.system("test.exe")

# gateway
ffi = FFI()
os.system("gcc -o test.so test.c -shared -fopenmp")
ffi.cdef(r''' int main(); ''')        
lib = ffi.dlopen(r'''test.so''')
lib.main()

错误是

OSError: cannot load library test.so: error 0x45a

我使用的是Python 3.5(最新的Anaconda发行版)和TDM-GCC 5.1.0。 测试在两台计算机上运行。什么可以解释差异行为?

1 个答案:

答案 0 :(得分:1)

简短版本-您通常使用cffi定义标头(.h)和源文件(.c)。对于openmp,您必须包括如下额外的编译和链接器参数:

import cffi

ffi = cffi.FFI()    
ffi.cdef(header_string)    
ffi.set_source(
    '_my_module_name',
    source_string,
    extra_compile_args=['-fopenmp'],
    extra_link_args=['-fopenmp'],
)
ffi.compile()
import _my_module_name