c++ - MinGW/G++/g95 链接错误 - libf95 未定义对 `MAIN_' 的引用

标签 c++ wxwidgets fortran mingw undefined-reference

总而言之,我的问题在于在 C++ 应用程序中编译 g95 对象。 实际上,我正在为一个旧的 Fortran 程序构建一个接口(interface)。 对于此任务,我使用 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. 

我已经阅读了与 C++ 集成的 g95 手册,实际上我在下面调用这些函数来控制 fortran 环境: void g95_runtime_start(int argc, char *argv[]); void g95_runtime_stop();

我还将 g95 Fortran 运行时库 libf95.a 和 libgcc.a 包含到我的链接器命令中。 最后,我没有实现 main 方法,因为这是由 wxWidgets 管理的,我的 fortran 子例程不能有 main 函数,因为这是一个调用 fortran 函数的 C++ 程序。

你们中的一些人可以帮我解决这个问题吗?我该如何解决这个未定义的对 MAIN__ 问题的引用? 任何想法将不胜感激。

最佳答案

我正在回答我自己的问题,因为我找到了解决方案。 问题不在于我的 g95 集成。 我只是覆盖了 wxWidgets 主宏来进行 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 值的情况下正常运行。

希望这个问题可以帮助到其他人。

关于c++ - MinGW/G++/g95 链接错误 - libf95 未定义对 `MAIN_' 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2401800/

相关文章:

c++ - visual studio 中的 wxWidgets 显示 : fatal error LNK1104: cannot open file 'wxmsw29ud_core.lib'

python - 无法让 wx.BufferedDC 绘制任何东西

file - 检查文件是否已经打开

c++ - 为什么STL映射不使用[]运算符const?

c++ - 初始化变量之前是否调用了父类构造函数?

c++ - 无法使用 JNI 从 C++ 调用 Java

c++ - 如何为 wxWidgets 编写 GUI 测试

C++ 在 Matrix 类中重载 << 运算符

Fortran:最大和最小的整数

c++ - 如何在 C++ 代码中调用模块中包含的 Fortran90 函数?