2
我试图编译一个调用fortran子例程的c代码,但我总是得到错误。编译错误:找不到“_for_stop_core”
下面是Fortran代码:
!fort_sub.f90
module myadd
use iso_c_binding
implicit none
contains
subroutine add1(a) bind(c)
implicit none
integer (c_int),intent (inout) :: a
a=a+1
if(a>10) then
stop
endif
end subroutine add1
end module myadd
,这里是C代码
//main.cpp
extern "C"{ void add1(int * a); }
int main(void){
int a=2;
add1(&a);
return 0;
}
当我编译他们
ifort -c fort_subs.f90
icc main.cpp fort_subs.o
我得到错误
Undefined symbols for architecture x86_64: "_for_stop_core", referenced from: _add1 in fort_subs.o ld: symbol(s) not found for architecture x86_64
,当我与
icc -c main.cpp
ifort -nofor-main fort_subs.f90 main.o
编译它们,我得到错误
Undefined symbols for architecture x86_64: "___gxx_personality_v0", referenced from: Dwarf Exception Unwind Info (__eh_frame) in main.o "___intel_new_feature_proc_init", referenced from: _main in main.o ld: symbol(s) not found for architecture x86_64
那么,为什么有这些错误,以及如何解决这些问题?
我知道在ibm编译器中有一个选项“-lxlf90”,告诉c编译器链接fortran库,它解决了“_for_stop_core”错误。 intel c编译器有没有类似的选项?
在我真正的代码的停止是不是最后陈述fortran子程序。而且它应该能够请求icc将Fortran库引入链接。你知道那面旗帜吗?我知道在ibm编译器中,可以使用'-lxlf90'标志告诉c编译器链接fortran库。另外我在真正的代码中有很多停止声明,用手改变它们是很乏味的。 – xslittlegrass
@xslittlegrass:我明白了,我猜想我没有考虑过这个问题(为了将来的参考:在这个问题中提到一些小细节可能是值得的)。我能够通过添加编译器选项“-lifcore”来让程序编译和运行。 –
这是什么--lifcore?当我使用icc不能识别:“ld:库找不到-lifcore” – xslittlegrass