C++ 编译并链接C++;用Fortran语言

C++ 编译并链接C++;用Fortran语言,c++,linker,g++,fortran,gfortran,C++,Linker,G++,Fortran,Gfortran,我正在尝试使用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

我正在尝试使用
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
您可以在此处找到源文件:和


你知道我能做些什么来克服这个问题吗?< /P> < p>你有两个主要程序:一个C++,另一个在FORTRAN中。通过以下方式删除Fortran one:

备选案文1: Fortran程序的第一位应该是块数据段。加上

BLOCK DATA INFO
一开始

备选案文2:
删除到第一个结尾的所有内容。

一个程序必须只有一个main(),如果有多个main(),那么当程序启动时,操作系统应该调用哪个main()?。您在Fortran和C模块中都声明了main()。删除其中一个。@Adriano我在Fortran源代码中没有“main”这个词:编译器是否隐式添加了它?它不是一个词,而是一个函数名(在C中)。在C语言中,它是应用程序的入口点(在fortran程序中也有)。让我们用入口点替换main。链接器说:你的应用程序有两个入口点,一个在main.f,一个在main.c,那么我不知道应该使用哪个入口点(由操作系统调用以运行链接的程序)。@spryno724尝试删除“初始化”部分中的“结束”。似乎检测到它是主程序体。@Netch删除“end”语句会导致编译器出现以下错误:
main.f:55.6:子程序setNBasis(value)错误:在(1)处的不可分类语句