我在编译一段与我的研究相关的代码时遇到了困难。它由一个用C++编写的组件和一个用FORTRAN编写的组件组成。我认为问题与我的gcc版本有关。
例如,第一个文件是一个C++文件(foo.ccp)
#include <iostream>
using namespace std;
extern "C" {
extern int MAIN__();
}
int main(){
cout << "main in C++\n";
return MAIN__();
}
第二个文件是bar.f90:
program test
implicit none
print*, 'MAIN in FORTRAN'
end program test
我正在尝试这样编译它:
g++ -c foo.cpp
gfortran foo.o -lstdc++ bar.f90
使用GCC-4.4.7编译没有问题,但使用GCC-4.8.x编译时会出现以下错误:
/tmp/cc5xIAFq.o: In function `main':
bar.f90:(.text+0x6d): multiple definition of `main'
foo.o:foo.cpp:(.text+0x0): first defined here
foo.o: In function `main':
foo.cpp:(.text+0x14): undefined reference to `MAIN__'
collect2: error: ld returned 1 exit status
我在这里读到,自4.5.x版本以来,gfortran处理'main'和'MAIN__'函数的命名方式发生了变化,但我不确定如何解决我的问题。
有什么想法吗?感谢您的帮助!