平台:Windows XP; MingGW with(gcc v.4.7.2)如何触发MinGW链接“msvcr100.dll”而不是“libstdC++。dll”和“libgcc_s_dw2-1.dll”内的“msvcr.dll”?
正如主题中所述,我该如何实现这一目标?
为什么?我确定我的多线程应用程序在Windowx XP上崩溃,以防我用MinGW编译应用程序。根据回溯,应用程序在“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
所以我的问题是,如何触发MinGW的了 “的libstdC++的dll” 和 “libgcc_s_dw2-1.dll” 中对 “msvcr100.dll” 链接。
我已经适应我的规格文件到:
* libgcc中:%{mthreads:-lmingwthrd} -lmingw32%{共享libgcc中:-lgcc_s}%{共享libgcc中:! - lgcc_eh} -lgcc -lmoldname -lmingwex -lmsvcr100
但是这并没有帮助,因为所提到的dll在dll的声明中仍然是链接的。只要看一看到嵌入式图片:
感谢这么远!
溴