簡體   English   中英

結合FORTRAN和C ++,鏈接錯誤

[英]Combining FORTRAN and C++, linking error

我應該在linux中將一個c ++代碼與舊的fortran代碼結合在一起,其中fortan是主要代碼。 我不是這方面的專家,我嘗試從簡單的測試開始,但仍然無法編譯它。 也許我很傻,但是我找不到任何可行的例子。 當可以通過ifort進行鏈接時,我設法編譯了fortran和c(需要在以后的intran編譯器中使用實際的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

那么,如何成功鏈接此程序?

您的主要(輸入項)在Fortran部分中,因此解決該問題的一種方法是使用ifort鏈接程序代替g ++(這也會自動鏈接ifcore)

ifort ctest.o ftest.o ... -lstdc++

如此看來,我在一頁上說得太多了,告訴我必須使用c ++編譯器進行鏈接。 以前,嘗試通過ifort進行鏈接時,總是有其他錯誤。

因此,在當前版本的測試代碼中,將ifort與-lstdc ++一起使用就足夠了。 此前,還有其他問題。

再次非常感謝您,祝您在自己的項目中一切順利!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM