簡體   English   中英

MinGW / G ++ / g95鏈接錯誤-libf95未定義對“ MAIN_”的引用

[英]MinGW/G++/g95 link error - libf95 undefined reference to `MAIN_'

總結起來,我的問題在於在C ++應用程序內部編譯g95對象。 實際上,我正在為舊的fortran程序構造一個接口。 對於此任務,我使用wxWidgets GUI庫,並在必要時調用fortran子例程。 一開始,我正在開發整個項目,該項目使用gfortran(GCC隨附)編譯我的fortran文件,並通過g ++ -o ...命令將其與我的應用程序鏈接。 一切工作正常,但是我的fotran子例程計算出的一些數值返回了NAN值。 經過研究,我意識到使用帶有-m32標志的gfortran編譯我的fortran文件會產生此NAN值問題。 盡管使用-m64標志進行編譯,但我的代碼可以正常運行。 唯一的麻煩是我的應用程序應該是32位,然后嘗試了另一個編譯器。 在這里,我找到了g95 Fortran編譯器,該編譯器編譯了我的fortran代碼並在32位環境中提供了正確的輸出。 但是,當我嘗試將這些g95對象鏈接到程序中時,出現以下錯誤:

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. 

我已經閱讀了g95與C ++集成的手冊,實際上是在調用以下函數來控制fortran環境:voi​​d g95_runtime_start(int argc,char * argv []); 無效的g95_runtime_stop();

我還將g95 Fortran運行時庫libf95.a和libgcc.a包含在我的鏈接器命令中。 最后,我沒有實現main方法,因為它是由wxWidgets管理的,而我的fortran子例程不能具有main函數,因為這是一個調用fortran函數的C ++程序。

你們中的一些人可以幫助我解決這個問題嗎? 如何解決對MAIN__問題的未定義引用? 任何想法將不勝感激。

我正在回答自己的問題,因為我找到了解決方案。 問題不是我的g95集成。 我只是覆蓋了wxWidgets main宏,以進行以下所示的int主函數初始化:

// 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值了。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM