プログラムは、-g フラグ、-static-libgcc、および -static-libstdc++ を使用して g++ によってコンパイルされました。最適化フラグは含まれていません。しかし、なぜかメインに入れません。なんで?
$ nm -C test.exe | grep メイン 006c05b0 T __getmainargs 006b0ad0 T __メイン 0088d0e8B __mingw_winmain_hInstance 0088d0e4B __mingw_winmain_lpCmdLine 0088d0ec B __mingw_winmain_nShowCmd 006ce518 D __native_dllmain_reason 00401180 t __tmainCRTStartup 0088edc8 I _imp____getmainargs 007491c0 r jisx0213_to_ucs_main 00405f0c T メイン 00401570 T mainCRTStartup 00884010 b メインレット 004a3371 T sqlite3_backup_remaining 0078ada0 r uhc_1_2charset_main 0078c440 r uhc_1_2uni_main_page81 007899a0 r uhc_2_2charset_main 0078db00 r uhc_2_2uni_main_pagea1 $ gdb test.exe GNU gdb (pcx32) 7.3.50.20111127-cvs Copyright (C) 2011 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL バージョン 3 以降 これはフリー ソフトウェアです。自由に変更して再配布してください。 法律で許可されている範囲で、保証はありません。「コピーを表示」と入力します 詳細については、「保証を表示する」を参照してください。 この GDB は「i686-w64-mingw32」として構成されました。 バグ報告の手順については、次を参照してください。 ... c:\test.exe からのシンボルの読み取り ...終わり。 (gdb) ブレークメイン 0x405f15 のブレークポイント 1: ファイル test.cpp、行 1054。 (gdb) mainCRTStartup を壊す 0x401570 のブレークポイント 2 (gdb) break __tmainCRTStartup 0x40118c のブレークポイント 3 (gdb) ブレーク __main 0x6b0ad0 のブレークポイント 4 (gdb) break __getmainargs 0x6c05b0 のブレークポイント 5 (gdb) 実行 起動プログラム: c:\test.exe [新スレッド 5832.0xc0c] 起動中、プログラムはコード 0xc0000022 で終了しました。 (gdb)
PS 依存関係ウォーカーは、SYSNTFY.DLL を開くことができず、IEFRAME.DLL を見つけることができないことを示しています。ただし、これは新しいものではなく、問題になることはありません。
(gdb) 情報ファイル 「c:\test.exe」のシンボル。 ローカル実行ファイル: `c:\test.exe', ファイルの種類は pei-i386 です。 エントリ ポイント: 0x401570 0x00401000 - 0x006c14c4 は .text 0x006c2000 - 0x006ce5d0 は .data 0x006cf000 - 0x0080c3e0 は .rdata 0x0080d000 - 0x00883c58 は .eh_frame 0x00884000 - 0x0088d178 は .bss です 0x0088e000 - 0x00891d40 は .idata 0x00892000 - 0x00892038 は .CRT 0x00893000 - 0x00893020 は .tls (gdb) ブレーク *0x401570 注: ブレークポイント 2 も pc 0x401570 に設定されています。 0x401570 のブレークポイント 6 (gdb) 実行 起動プログラム: c:\test.exe [新規スレッド 5332.0x28b0] 起動中、プログラムはコード 0xc0000022 で終了しました。
これは、エントリ ポイントが確か__tmainCRTStartup
に であることを示していますが、gdb はそこに到達していないようです。
答えはコメントのようなものでした: ライブラリがすべてを台無しにしていました。それを理解するために、メインに到達するまで、すべてのライブラリを1つずつリンク解除しました。