我有一个用gcc编译的库,使用-fopenmp并链接到libmkl_gnu_thread.a。
当我尝试使用ctypes加载此库时,我收到错误消息 未定义的符号:GOMP_critical_end
在没有openmp的情况下编译它并链接到libmkl_sequential.a而不是gnu_thread,该库工作正常,但我不想构建不同的版本以支持Python。
如何修复此错误?我是否需要使用openmp支持从源代码构建python?我想避免这种情况,因为用户不想构建自己的python来使用这个软件。
我正在使用python2.7.6。
答案 0 :(得分:3)
编译时-fopenmp
启用OpenMP支持,并在结果对象文件中引入GNU OpenMP运行时支持库libgomp
中的函数引用。然后,您应该将您的共享对象(也称为共享库)与libgomp
链接,以便告知运行时链接程序在您使用库时也加载libgomp
(如果尚未通过其他依赖项加载)这样它就可以解决所有符号。
与libgomp
的关联可以通过两种方式完成:
-fopenmp
标志。ld
),请为其提供-lgomp
选项。第二种情况的警告:如果您使用的GCC不是系统范围的默认GCC,例如如果您安装了多个GCC版本或使用来自单独软件包的版本或自己构建了一个版本,则应提供与GCC版本匹配的libgomp.so
的正确路径。