[英]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.