我應該在linux
耦合一個C++代碼與舊的fortran
代碼,其中fortan
是主代碼。我不是這方面的專家,我嘗試從簡單的測試開始,但仍然無法編譯它。也許我很愚蠢,但我無法在任何地方找到有效的例子。我設法編譯fortran和c,當鏈接可以通過ifort完成時(以後需要使用intel編譯器和fortran代碼)。但如果我理解正確,c++
,鏈接必須由c++
編譯器(g++
)完成。結合FORTRAN和C++,鏈接錯誤
那麼我錯在這裏做的:
我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
所以我應該做與此程序鏈接成功?
難道你不能使用GCC來編譯fortran代碼嗎? AFAIR GCC編譯器套件支持Fortran。 –
那麼問題是,真正的Fortran程序,我與C++結合在一起,是編譯器依賴編程的真正老式和大型代碼。用gcc編譯會給出錯誤的結果。並糾正這一點,將是一項巨大的工作。 – user3279036