0

プラットフォーム: Windows XP; MingGW (gcc v.4.7.2)

トピックで述べたように、どうすればこれを達成できますか?

なんで?アプリケーションを MinGW でコンパイルすると、Windowsx XP でマルチスレッド アプリケーションがクラッシュすることがわかりました。バックトレースによると、アプリケーションは「msvcrt.dll」に組み込まれている「setlocale」関数でクラッシュします。

Visual Studio 2010 でアプリケーションをコンパイルしようとしましたが、依存関係ウォーカーが明らかにしたように、「msvcr100.dll」がリンクされており、「setlocale」関数のより堅牢なバージョンが含まれている可能性があるため、そのようなクラッシュはないと判断しました。

ここでバックトレース:

ABoostLog.exe caused an Access Violation at location 77c03509 in module msvcrt.dll Reading from location 00000000.

Registers:
eax=00cdfb88 ebx=003d6afc ecx=003d6d24 edx=003d6d24 esi=00000758 edi=00000000
eip=7c91eb94 esp=00cdfb4c ebp=00cdfbb0 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246

Call stack:
7C91EB94 ntdll.dll:7C91EB94 KiFastSystemCallRet
7C802532 kernel32.dll:7C802532 WaitForSingleObject
0041E33D WithThread.exe:0041E33D
XXXXXXXXXXXXXXXXXXXXXX
Registers:
eax=77c2f94c ebx=77c2f94c ecx=00000000 edx=77c2f798 esi=77c2f79a edi=ffffffff
eip=77c03509 esp=0022f520 ebp=0022f534 iopl=0 nv up ei ng nz ac po cy
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000297

Call stack:
77C03509 msvcrt.dll:77C03509 unguarded_readlc_active_add_func
77C03C1B msvcrt.dll:77C03C1B
unguarded_readlc_active_add_func
77C03C60 msvcrt.dll:77C03C60 setlocale
6FC671D1 libstdc++-6.dll:6FC671D1 std::__timepunct::_M_put
6FC7A63C libstdc++-6.dll:6FC7A63C std::time_put > >::do_put
6FC7A4CA libstdc++-6.dll:6FC7A4CA std::time_put > >::put
004EE047 ABoostLog.exe:004EE047

私の質問は、「libstdc++.dll」および「libgcc_s_dw2-1.dll」内の「msvcr100.dll」に対してリンクするように MinGW をトリガーする方法です。

私はすでにスペックファイルを次のように適応させています:

*libgcc: %{mthreads:-lmingwthrd} -lmingw32 %{shared-libgcc:-lgcc_s} %{!shared-libgcc:-lgcc_eh} -lgcc -lmoldname -lmingwex -lmsvcr100

しかし、言及されたdllはまだdllの記述内にリンクされているため、これは役に立ちません。埋め込まれた画像を見てください:

ここに画像の説明を入力

これまでありがとう!

Br

4

1 に答える 1