从 python 调用 openMP 共享库时未定义 opnMP 函数

Undefined opnMP function when calling a openMP shared library from python

我想用 openMP 编写一个小的 c++ - 代码,将其编译为 .so 并从 python 使用调用它。 C++ 源代码是 -

from ctypes import *
import ctypes

c_lib = cdll.LoadLibrary("libtest.so")
c_lib.openmp_test()

而cpp文件如下-

#include<iostream>
#include<omp.h>
void openmp_test()
{
    std::cout<<"in c++";
    int threads = omp_get_max_threads();
    std::cout<<threads;
}

我使用 -

创建 .so 文件
g++ -c -fPIC -fopenmp test.cpp -o test.o
g++ test.o -shared -o libtest.so

但是 运行 python 文件给我错误 -

undefined symbol: omp_get_max_threads

我做错了什么? 提前致谢

您应该将库 omp 添加到程序的库依赖项中。

  g++ test.o -shared -lomp  -o libtest.so

我为您提供完整的解决方案:

 #include<iostream>
 #include<omp.h>
 extern "C"
 {
 void openmp_test()
 {
     std::cout<<"in c++";
     int threads = omp_get_max_threads();
     std::cout<<threads;
 }
 }

之后你应该创建共享库:

g++ -c -fPIC -fopenmp test.cpp -o test.o
g++ test.o -shared  -lomp -o libtest.so

然后 运行 你的 python 脚本当然你应该提供你的库的完整路径。