在编译/编写 makefile 时,我并不是最好的。
我正在尝试编写一个同时使用 GSL 和 OpenMP 的程序。
我分别使用 GSL 和 OpenMP 没有问题,但是我在使用两者时遇到了问题。例如,我可以编译 GSL 程序 http://www.gnu.org/software/gsl/manual/html_node/An-Example-Program.html 通过键入
$gcc -c Bessel.c
$gcc Bessel.o -lgsl -lgslcblas -lm
$./a.out
它有效。
我还能够编译使用我在这里找到的 OpenMP 的程序: 为 OpenMP 中的每个内部循环启动一个线程
在这种情况下,我输入
$gcc -fopenmp test_omp.c
$./a.out
我得到了我想要的(我用过的所有 4 个线程)。
但是,当我简单地编写一个结合这两个代码的程序时
#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>
#include <omp.h>
int
main (void)
{
double x = 5.0;
double y = gsl_sf_bessel_J0 (x);
printf ("J0(%g) = %.18e\n", x, y);
int dimension = 4;
int i = 0;
int j = 0;
#pragma omp parallel private(i, j)
for (i =0; i < dimension; i++)
for (j = 0; j < dimension; j++)
printf("i=%d, jjj=%d, thread = %d\n", i, j, omp_get_thread_num());
return 0;
}
然后我尝试编译输入
$gcc -c Bessel_omp_test.c
$gcc Bessel_omp_test.o -fopenmp -lgsl -lgslcblas -lm
$./a.out
GSL 部分有效(计算 Bessel 函数),但 OpenMP 部分仅使用一个线程。我不确定这里有什么问题...