混合Fortran/C++;使用英特尔编译器:对';系统'; 我在FORTRAN 1990和C++ 11中使用了一个大型混合语言代码。我最近在一个新平台上编译了英特尔编译器(我以前成功使用过),特别是英特尔版本19.1.1.217
我将问题归结为一个简单的测试:混合Fortran/C++;使用英特尔编译器:对';系统'; 我在FORTRAN 1990和C++ 11中使用了一个大型混合语言代码。我最近在一个新平台上编译了英特尔编译器(我以前成功使用过),特别是英特尔版本19.1.1.217,c++,fortran,C++,Fortran,我将问题归结为一个简单的测试: f.F90 subroutine ff() implicit none call system('echo y') end subroutine ff main.cc #include <iostream> extern "C" { void ff_(void); } int main(void) { ff_(); return 0; } …之后,我得到以下信息: f.o: In function `ff
f.F90
subroutine ff()
implicit none
call system('echo y')
end subroutine ff
main.cc
#include <iostream>
extern "C"
{
void ff_(void);
}
int main(void)
{
ff_();
return 0;
}
…之后,我得到以下信息:
f.o: In function `ff_':
f.F90:(.text+0xd): undefined reference to `system_'
我知道对system()
的调用不是标准的一部分,但我可以毫无问题地成功编译和运行以下内容:
p.F90
:
program ff
implicit none
call system('echo y')
end program
mpif90-f90=ifort p.f90-o pexe&&./pexe
y
这说明使用<代码> MPIF90-F90= iFux是不方便地告诉链接器在一些额外的库中链接,但是在结果的可执行文件上运行<代码> LDD 显示了当我编译一个简单的C++程序时链接到的库的子集。
我需要链接什么才能阻止此错误?好吧,我在问了这个问题后,立即发现了解决方案。通过使用
mpif90-f90=ifort-v(源文件)
我能够看到链接的所有内容,并一次一个地尝试每个库,直到它工作为止
y