2011-08-31 96 views
1

我打算從FORTRAN調用一個C++函數,爲此我使用了ISO_C_Binding模塊。在FORTRAN主文件的壓縮和C++使用命令鏈接FORTRAN和C++對象文件

功能後
gfortran -c mlp8.f90 

g++ -c mean_cpp.cc 

這將創建對象文件,但在鏈接階段的一些成員,我要使用這些命令的建議

g++ mlp8.o mean_cpp.o -o main –lgfortran 

即使用C++編譯器鏈接到FORTRAN庫,但它給錯誤,如

/Cygnus/cygwin-b20/H-i586-cygwin32/i586-win32/bin/ld: 
    cannot open –lgfortran: No such a file or directory 

Collect2:ld return 1 exit status 

所以,我認爲主要的問題是g++連接器不能與FORTRAN庫鏈接,所以可能是我需要包括在一些路徑或者可能需要在g++編譯器中做一些設置,我不知道該怎麼做,所以請幫忙解決這個問題。

+0

鏈接器無法找到gfortran庫(文件名是libgfortran.a或libgfortran.so)。你可以檢查這個文件是否存在於你的/ lib目錄中?另外,我會重新排列命令行以將.o文件放在-o主目錄後面。 – fvu

+2

這是幾乎相同的問題,如今天早些時候詢問的那樣,http://stackoverflow.com/questions/7255468/calling-c-function-from-fortran-not-c。合併它們會更好。 –

回答

3

你會發現文件libgfortran.*(與find/-name "libgfortran.*"locate例如;或者在Windows的方式Win+g, F3或任何文件管理器),記錄路徑它在哪裏,做

g++ mlp8.o mean_cpp.o -o main -LPATH_RECORDED –lgfortran 

其中PATH_RECORDED是路徑。

試試這個LIB列表(得到它從我的-v選項MinGW的gfortran)

g++ mlp8.o mean_cpp.o -o main -LPATH_RECORDED –lgfortran -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt 
+0

我使用命令(g ++ main.o print_hi.o -o main -LC:\ gfortran \ lib -lgfortran)進行鏈接,其中C:\ glfortan \ lib是libgfortran.a文件的路徑,但它提供了很多錯誤,如c:\ gfortran \ lib/libgfotran.a(transfer.o)(.text $ sprintf + 0x1b):transfer.c未定義引用'_ _mingw_vsprintf' 等等 我該怎麼辦才能解決這個問題,我也試着用gfortran連接到C++庫的地址,但又給出了很多錯誤。我正在使用Windows Vista,使用g ++和gfortran編譯器。 在此先感謝 – Zahur

+0

已更新的答案。 – osgx

+0

非常感謝您的及時回覆,這非常有幫助。現在的問題是,如果我使用由您建議的命令(g ++ main.o print_hi.o -o main -LC:\ gfortran \ lib -lgfortran -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt),所以它會給出錯誤(/ Cygnus/cygwin-b20/H-i586-cygwin32/i586-cygwin32/bin/1d:無法打開-lgcc_s:沒有這樣的文件或目錄)所以它找不到這個庫文件,或g ++文件夾中,即使我搜索了整個計算機,但找不到這樣的文件。 – Zahur