使用LDFLAGS使用fortran openmp编译oct文件

使用LDFLAGS使用fortran openmp编译oct文件,fortran,openmp,octave,Fortran,Openmp,Octave,使用ubuntu 14.04 octave 3.8.1。 我正在尝试创建一个.oct文件,它使用多线程fortran程序。但是,mkoctfile在链接期间无法使用相关库 我使用的文件如下所示: c: 我希望这段代码能输出四行“Hello”。 我用下面的命令编译它 mkoctfile CPP.CPP FORTRAN.f90 结果,我只得到一个输出行,这表明MultiTRHREANG被忽略 编译时在八度之外(对C++文件稍作改动),用以下命令: gcc -c CPP.cpp &&

使用ubuntu 14.04 octave 3.8.1。 我正在尝试创建一个.oct文件,它使用多线程fortran程序。但是,mkoctfile在链接期间无法使用相关库

我使用的文件如下所示: c:

我希望这段代码能输出四行“Hello”。 我用下面的命令编译它 mkoctfile CPP.CPP FORTRAN.f90 结果,我只得到一个输出行,这表明MultiTRHREANG被忽略

编译时在八度之外(对C++文件稍作改动),用以下命令:

gcc -c CPP.cpp && gfortran -Wall -fimplicit-none -Wtabs -fdefault -real-8 -fopenmp  -c FORTRAN.f90 &&gfortran -fopenmp -o3 CPP.o FORTRAN.o -lstdc++ -o OUT.out
结果应该是这样的

从几个测试中可以明显看出,mkoctfile不能以任何形式使用-fopenmp标志。正如我们所发现的,这应该通过使用LDFLAGS来解决,然而,由于某种原因,我在这方面失败了

我在倍频程终端设置环境变量 setenv(“LDFLAGS”,“-Wl,-b符号函数,-Wl,-z,relro,-fopenmp”) setenv(“FFLAGS”,“-g-O2-fstack保护器——参数=ssp缓冲区大小=4-fopenmp”) $mkoctfile--print LDFLAGS表示变量设置成功。但是,编译后的函数无法加载:$undefined symbol:GOMP_parallel_start

我尝试过显式列出库,但结果是一样的

mkoctfile ce5.cpp fort5.o '-Wl,-fopenmp' '-l /usr/lib/x86_64-linux-gnu/libgomp.so.1
mkoctfile ce5.cpp fort5.o '-Wl,-fopenmp' '-L /usr/lib/x86_64-linux-gnu/'
我正确使用了旗子吗?我还应该做些什么来获得正确的编译?

问题已解决: 似乎是连续应用以下命令完成了此任务:

setenv("FFLAGS","-g -O2 -fstack-protector --param=ssp-buffer-size=4 -fopenmp")
setenv("LDFLAGS","-Wl,-Bsymbolic-functions, -Wl,-z,relro, -Wl,-fopenmp")
mkoctfile ce5.cpp fort5.o  '-L, /usr/lib/x86_64-linux-gnu/libgomp.so.1'

最有可能的问题是为编译器设置了正确的标志($-fopenmp在FFLAGS中)和正确的库位置指示。

始终使用标记fortran。仅在需要使用特定版本时添加版本标记。
mkoctfile ce5.cpp fort5.o '-Wl,-fopenmp' '-l /usr/lib/x86_64-linux-gnu/libgomp.so.1
mkoctfile ce5.cpp fort5.o '-Wl,-fopenmp' '-L /usr/lib/x86_64-linux-gnu/'
setenv("FFLAGS","-g -O2 -fstack-protector --param=ssp-buffer-size=4 -fopenmp")
setenv("LDFLAGS","-Wl,-Bsymbolic-functions, -Wl,-z,relro, -Wl,-fopenmp")
mkoctfile ce5.cpp fort5.o  '-L, /usr/lib/x86_64-linux-gnu/libgomp.so.1'