Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未定义符号mpi\u fortran\u错误代码\u忽略___Fortran_Mpi_Static Linking_Gfortran - Fatal编程技术网

未定义符号mpi\u fortran\u错误代码\u忽略__

未定义符号mpi\u fortran\u错误代码\u忽略__,fortran,mpi,static-linking,gfortran,Fortran,Mpi,Static Linking,Gfortran,我正试图在Ubuntu 14.04上编译一个Fortran程序(vasp) 我在较旧的系统(13.10)上获得了成功,但在重新安装我的机器后,出现了符号查找错误: /usr/lib/libmpi_f77.so.1:未定义符号:mpi_fortran\u errcodes\u ignore__ 奇怪的是,这个符号似乎就在那里: readelf-W-s/usr/lib/libmpi_f77.so.1 | grep“errcodes_ignore” 16:0000000000000000对象全局默认值

我正试图在Ubuntu 14.04上编译一个Fortran程序(vasp)

我在较旧的系统(13.10)上获得了成功,但在重新安装我的机器后,出现了符号查找错误:

/usr/lib/libmpi_f77.so.1:未定义符号:mpi_fortran\u errcodes\u ignore__

奇怪的是,这个符号似乎就在那里:

readelf-W-s/usr/lib/libmpi_f77.so.1 | grep“errcodes_ignore”

16:0000000000000000对象全局默认值和mpi\u fortran\u错误代码\u忽略__ 142:0000000000000000对象全局默认值和mpi\u fortran\u错误代码\u忽略 244:0000000000000000对象全局默认值和mpi\u fortran\u错误代码\u忽略_

我怀疑这可能是因为该符号仅位于库的静态部分,因为当我运行时

readelf-W-s-D/usr/lib/libmpi_f77.so.1 | grep“errcodes_ignore”

我没有得到任何结果,但对于这是否真的是问题以及如何解决问题,我有点不知所措

任何帮助都将不胜感激

谢谢


马丁。

我通过这个问题解决了这个问题:


我的LD_LIBRARY_路径包含指向不同版本MPI的路径(用于我正在使用的另一个软件)。运行程序前更改路径解决了问题。

在我的系统上,该符号位于libmpi.so(OpenMPI 1.10)中。尝试将-lmpi添加到链接选项中,看看符号是否解析。谢谢,但似乎没有帮助。ELF DSO中没有静态部分。动态符号表(也称为
.dynsym
a.k.a.全局符号表)仅重复普通符号表中的全局符号子集
mpi\u fortran\u errcode\u ignore*
不是由
libmpi\u f77.so.1
提供的,而是从另一个带有开放mpi的DSO导入的,这从其
UND
定义的状态可以看出。为什么这些不在全球符号表中对我来说是一个完全的谜。在任何情况下,您都必须链接到
libmpi.so.1
。请确保它没有被其他MPI版本/实现覆盖。感谢您的帮助和解释。(实际上不知道如何解释readelf输出)到目前为止。我没有成功链接到libmpi(在Makefile中的所有链接器选项语句中添加了-lmpi,但到目前为止没有成功)。我在链接器中添加了一个-t选项,并用灰色标记为“mpi”。我得到-lmpi(/usr/lib/openmpi/lib//libmpi.so)-lmpi_f90(/usr/lib/openmpi/lib//libmpi_f90.so)-lmpi_f77(/usr/lib/openmpi/lib//libmpi_f77.so),所以我认为它应该链接到libmpi。令人费解。