2010-03-08 109 views
2

總結一下,我的問題在於編譯C++應用程序中的g95對象。其實,我正在構建一箇舊的fortran程序的接口。 對於此任務,我使用wxWidgets GUI庫,並在必要時調用fortran子例程。 最初,我正在開發整個項目,用gfortran(GCC附帶)編譯我的fortran文件,並通過g ++ -o ...命令將它們與我的應用程序鏈接。一切工作正常,但一些數字值由我的fotran子程序計算返回NAN值。 做了一些研究,我意識到用-m32標誌編譯我的fortran文件與gfortran,產生這個NAN值問題。儘管用-m64標誌編譯,我的代碼運行良好。 這裏唯一的麻煩是我的應用程序應該是32位,然後我嘗試了另一個壓縮機。在這裏,我找到了g95 Fortran編譯器,它編譯我的fortran代碼,並在32位環境中提供正確的輸出。 但是,當我試圖將這些G95對象鏈接到我的節目,我看到這個以下錯誤:MinGW/G ++/g95鏈接錯誤 - libf95對'MAIN_'的未定義引用

g++ -oCyclonTechTower.exe src\fortran\Modulo_Global.o src\fortran\Prop_Fisicas.o src\fortran\inversa.o src\fortran\tower.o src\fortran\PredadeCarga.o src\fortran\gota.o src\fortran\tadi.o src\view\SimulationORSATCustomDialog.o src\view\SimulationChildGUIFrame.o src\view\ParentGUIFrame.o src\view\ClientGUIFrame.o src\model\TowerData.o src\controller\SimulationController.o src\THEIACyclonTechTower.o ..\Resource\resource.o -Lc:\wxWidgets-2.6.4\lib -Lc:\MinGW\lib\gcc-lib\i686-pc-mingw32\4.1.2 -Bdynamic -Wl,--subsystem,windows -mwindows c:\wxWidgets-2.6.4\lib\libwx_mswu-2.6.a -lwxregexu-2.6 -lwxexpat-2.6 -lwxtiff-2.6 -lwxjpeg-2.6 -lwxpng-2.6 -lwxzlib-2.6 -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32 -lgcc -lf95 
**c:\MinGW\lib\gcc-lib\i686-pc-mingw32\4.1.2/libf95.a(main.o):(.text+0x32): undefined reference to `MAIN_' 
collect2: ld returned 1 exit status** 
Build error occurred, build is stopped 
Time consumed: 1531 ms. 

我已經閱讀使用C集成G95手冊++和我實際上調用這些函數婁控制fortran環境: void g95_runtime_start(int argc,char * argv []); void g95_runtime_stop();

我還將g95 Fortran運行時庫libf95.a和libgcc.a包含到我的鏈接器命令中。 完成,我沒有實現的主要方法,因爲這是由wxWidgets管理,我的fortran子程序不能有一個主要功能,因爲這是一個調用fortran函數的C++程序。

你們有些人可以幫我解決這個問題嗎?我怎樣才能解決這個未定義的參考MAIN__問題? 任何想法將不勝感激。

回答

0

我回答我自己的問題,因爲我得到了解決方案。 問題不在於我的g95整合。 我只是簡單地覆蓋了一個int main函數初始化wxWidgets的主宏作爲波紋管介紹:

// Give wxWidgets the means to create a MyApp object 
//IMPLEMENT_APP(MyApp); 

int main(int argc, char *argv[]) { 

    //MyWxApp derives from wxApp 
    MyApp *myapp = new MyApp(); 
    wxApp::SetInstance(myapp); 
    wxEntryStart(argc, argv); 
    myapp->OnInit(); 

    myapp->OnRun(); 
    myapp->OnExit(); 
    wxEntryCleanup(); 

} 

順便說一句,所需的主要功能是現在定義,我的應用程序現在能正常使用以及沒有NAN值。

我希望這個問題可以幫助別人。

+0

你不能直接調用'OnInit()'&c,這是行不通的。直接調用'wxEntry()'並使用'IMPLEMENT_APP_NO_MAIN()'宏。 – 2013-10-27 22:02:48

相關問題