我使用的是Windows7和最新的MinGW版本(gcc v4.7.2)。
我的问题是,为一个简单的测试应用程序触发MinGW来使用"MSVCR100“和"MSVCP100”运行时dll。
我的默认自定义规范文件如下所示:
%{ -lmingw32 %{共享-libgcc:-lgcc _s}%{!共享-libgcc:-lgcc_eh}-lgcc -lmoldname -lmingwex -lmsvcr100 -lmsvcp100
( mingw发行版没有在lib目录中发布任何"MSVCP100.a“,所以我在"dumpbin”和"dlltool“的帮助下创建了我的"MSVCP100.a”文件。)
我现在的问题是,如果我编译简单的测试应用程序(它使用boost-date-time和boost-log),我将得到以下未定义的引用:
但是这是不可能的,因为如果我用Visual 2010编译我的测试应用程序,然后用一个依赖遍历器对二进制进行分析,我就会发现,dll的"MSVCR100“和"MSVCP100”是引用的。
为什么我需要这个?我已经发现,我的测试应用程序在Windows上崩溃了,但在Win7系统上没有崩溃,因为"msvcrt.dll“中的"setlocale”函数(v7.0.2600.5512)并不是线程安全的(请在这里查看我和boost.log维护者之间关于这个问题的对话:
Boost-日志)。所以我很好奇,如果我的测试应用程序也会崩溃的话,如果我用Visual 2010编译它并在WinXP上测试二进制文件的话。我发现,不会发生崩溃,因为Vistual将我的测试应用程序链接到"MSVCR100.dll“(以及MSVCP100.dll)。
由于一些限制,无法将我的项目代码从MinGW迁移到Visual。因此,我试图将mingw的规范文件更改为针对上述dll的链接。
问题:如何触发MinGW,不再链接到"msvcrt.dll",而是指向"msvcrt100.dll"?或者更广泛地说:如何触发MinGW以使用与Visual相同的运行时dll?
任何帮助都是非常感谢的。到目前为止谢谢你,
拉斐尔
发布于 2013-10-30 23:04:58
试一试:
%{ -lmingw32 %{共享-libgcc:-lgcc _s}%{!共享-libgcc:-lgcc_eh}-lgcc -lmoldname100 -lmingwex -lmsvcr100 -lmsvcp100
https://stackoverflow.com/questions/17171050
复制相似问题