요약하면 내 문제는 C++ 응용 프로그램 내에서 g95 객체를 컴파일하는 것으로 구성됩니다. 사실, 저는 오래된 포트란 프로그램을위한 인터페이스를 만들고 있습니다. 이 작업에서는 wxWidgets GUI 라이브러리를 사용하고 필요할 때 Fortran 서브 루틴을 호출합니다. 처음에는 gfortran (GCC와 함께 제공)을 사용하여 fortran 파일을 컴파일하고 g ++ -o ... 명령으로 내 응용 프로그램과 연결하는 전체 프로젝트를 개발했습니다. 모든 것이 잘 작동했지만 내 fotran 서브 루틴에 의해 계산 된 일부 숫자 값은 NAN 값을 반환했습니다. 몇 가지 조사를 해보니 gfortran을 -m32 플래그로 컴파일하면 Fortran 파일을 컴파일 할 때 NAN 값 문제가 발생한다는 것을 알았습니다. -m64 플래그로 컴파일하더라도 내 코드는 제대로 작동합니다. 유일한 문제는 내 응용 프로그램이 32 비트이어야하고 다른 컴파일러를 tryed해야한다는 것입니다. 여기에 필자는 포트란 코드를 컴파일하고 32 비트 환경에서 올바른 결과를 제공하는 g95 Fortran 컴파일러를 발견했습니다. 하지만 난이 다음과 같은 오류 참조 내 프로그램에 이러한 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 사용 설명서를 읽어 ++ 그리고 실제로 이러한 기능을 제어하기위한 노호 전화 드렸습니다 포트란 환경 : void g95_runtime_start (int argc, char * argv []); void g95_runtime_stop();
또한 g95 Fortran 런타임 라이브러리 libf95.a와 libgcc.a를 링커 명령에 포함 시켰습니다. 마무리, wxWidgets에 의해 관리되기 때문에 main 메소드가 구현되지 않았습니다. fortran 함수를 호출하는 C++ 프로그램이기 때문에 fortran 서브 루틴은 main 함수를 가질 수 없습니다.
여러분 중 일부는이 문제를 도와 줄 수 있습니까? 이 정의되지 않은 MAIN__ 문제를 어떻게 해결할 수 있습니까? 어떤 아이디어라도 대단히 감사하겠습니다.
당신은'OnInit()'과 & c를 직접 호출하면 안된다. 이것은 작동하지 않을 것이다. 대신'wxEntry()'를 직접 호출하고 IMPLEMENT_APP_NO_MAIN() 매크로를 사용하십시오. –