簡體   English   中英

使用 CFFI 從 Python 調用帶有 OpenMP 的 C 函數

[英]Using CFFI to call C-function with OpenMP from Python

我正在使用 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。 測試在兩台計算機上運行。 什么可以解釋差異行為?

簡短版本 - 像往常一樣使用 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM