2

我应该将linux一个 c++ 代码与旧代码结合起来,主要代码fortran在哪里。fortan我不是这方面的专家,我尝试从简单的测试开始,但我仍然无法编译它。也许我很愚蠢,但我无法在任何地方找到一个可行的例子。当链接可以通过 ifort 完成时,我设法编译了 fortran 和 c(稍后需要使用英特尔编译器和实际的 fortran 代码)。但是如果我理解正确的话,c++链接必须由c++编译器(g++)完成。

那么我在这里做错了什么:

我的 FORTRAN 测试代码“ftest.f”:


PROGRAM MAIN

  IMPLICIT NONE
  INTEGER I
  write(*,*) "hello fortran1"
  CALL ctest()
  write(*,*) "hello fortran2"

END PROGRAM

和 C++ 代码“ctest.cpp”


#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>

extern "C" void ctest_();

void ctest_(){
   int i;
 //   std::cout << "hello c \n";
   printf("hello c\n");
}

我尝试使用以下内容进行编译:

ifort -c ftest.f
g++ -c ctest.cpp
g++ -ldl -lm -limf -L -l -lifcore ctest.o ftest.o

我得到一个错误:

/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

那么我应该怎么做才能成功链接这个程序呢?

4

2 回答 2

4

您的主要(条目)在 Fortran 部分中,因此解决它的一种方法是使用ifort 链接器而不是 g++(这也会自动链接 ifcore)

ifort ctest.o ftest.o ... -lstdc++
于 2014-02-06T10:53:51.810 回答
1

所以看起来我在一页上说得太多了,告诉我我必须使用 c++ 编译器进行链接。早些时候,尝试通过 ifort 链接时总是出现其他问题。

因此,使用 ifort 和 -lstdc++ 对我的当前版本的测试代码来说真的足够了。早些时候只是其他事情是错误的。

再次非常感谢您,祝您在自己的项目中一切顺利!

于 2014-02-06T11:10:23.067 回答