gpt4 book ai didi

OS X 中使用 openmp 的 Python 扩展

转载 作者:行者123 更新时间:2023-11-30 16:55:25 25 4
gpt4 key购买 nike

我创建了一个 python 扩展,它可以在 Linux 中正常工作,但在 os x 中不起作用。

C 代码使用 openmp 库。

os x 中预装的 C 编译器是 clang,预装的 python 是用 clang 构建的。那个 clang 不支持 openmp。

我可以通过安装 gcc-6 来编译和运行我的代码:

    brew install gcc

我可以通过在文件 setup.py 中包含环境变量 CC 来构建我的库:

    os.environ["CC"]="/usr/local/Cellar/gcc/6.2.0/bin/gcc-6"

我在安装配置中包含了 gcc 库路径:

    library_dirs = ["/usr/local/Cellar/gcc/6.2.0/lib/gcc/6/","../build/"],

但是当我从 python 加载库时出现错误:

    import myLibraryName
ImportError:dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/LIBIRWLS.so,2):找不到符号:___emutls_get_address 引用自:/usr/local/opt/gcc/lib/gcc/6/libgomp.1.dylib 预期位于:/usr/lib/libSystem.B.dylib 在/usr/local/opt/gcc/lib/gcc/6/libgomp.1.dylib

我该怎么办?在 OS X 中创建使用 openmp 库的 python 扩展的正确步骤是什么?

最佳答案

我想我已经解决了这个问题。这是我正在从事的项目:

https://github.com/RobeDM/LIBIRWLS

简历中:

1 - 我安装了 gcc6

brew install gcc

2 - 然后我在文件 setup.py 的环境变量中声明了 gcc 的路径:

os.environ["CC"]=/usr/local/Cellar/gcc/6.2.0/bin/gcc-6

3 - 我将 CFLAGS 环境变量留空:

os.environ["CFLGAS"]=""

4 - 在扩展模块中,我包含了与 gcc6 关联的文件 libgomp.a,并且使用了额外的 ling arg“static”:

ext_modules = [ 
Extension('LIBIRWLS',
include_dirs=['.','../include/',np.get_include()],
sources = ['myexample.c'],
extra_objects = ["/usr/local/Cellar/gcc/6.2.0/lib/gcc/6/libgomp.a",
....Object files of my library
],
library_dirs = ["../build/"],
extra_compile_args=['-Wno-cpp','-static','-lgomp','-lblas','-llapack'],
extra_link_args=['-static']
)
]

设置( 名称 = 'LIBNAME', 版本='1.0', description="我的扩展描述", 安装需要=[ ' NumPy ', 'scipy', ], 网址='https://myurl.com ', 外部模块 = 外部模块 )

关于OS X 中使用 openmp 的 Python 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40317813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com