【发布时间】:2014-01-18 22:46:40
【问题描述】:
我正在尝试使用 gfortran 编译器编译有效的 Fortran 77 文件。我使用以下命令编译 Fortran:
gfortran -c main.f -o main-fortran.o -llapack -lblas
我还需要将它与一个编译好的 C++ 程序链接,如下所示:
g++ -c main.cpp -o main-cpp.o
这两个文件都可以编译,没有任何错误或警告。
但是,我无法将它们链接到一个可执行文件中。这是我正在使用的命令:
g++ main-cpp.o main-fortran.o -o run.exe -lgfortran -llapack -lblas
然后链接器给出这个错误:
main-fortran.o: In function `main':
main.f:(.text+0x2e18): multiple definition of `main'
main-cpp.o:main.cpp:(.text+0x8e9): first defined here
collect2: ld returned 1 exit status
您可以在此处找到源文件:C++ 和 Fortran 77。
知道我能做些什么来克服这个问题吗?
【问题讨论】:
-
一个程序必须只有一个main(),如果有多个,那么程序启动时操作系统应该调用哪一个?您在 Fortran 和 C 模块中都声明了 main()。删除其中一个。
-
@Adriano Fortran 源代码中没有“main”这个词:github.com/ffiadmin/independent-study/blob/master/main.f 编译器是否隐式添加了它?
-
这不是一个词,它是一个函数名(在 C 中)。在 C 语言中,它是应用程序的入口点(并且在您的 fortran 程序中)。让我们将 main 替换为 entry point。链接器说:您的应用程序有两个入口点,一个在 main.f 中,一个在 main.c 中,然后我不知道应该使用哪一个(由操作系统调用以运行链接的程序)。
-
@spryno724 尝试删除带有“end”的“initialization”部分。似乎被检测为主要程序主体。
-
@Netch 删除“end”语句会导致编译器给出几个错误,如下所示:
main.f:55.6: subroutine setNBasis(value) Error: Unclassifiable statement at (1)
标签: c++ linker g++ fortran gfortran