linux
1 つの 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
では、このプログラムのリンクを成功させるにはどうすればよいでしょうか?