如何更改MinGW的spec文件以链接MSVCR100.dll和MSVCP100.dll?

时间:2013-06-18 14:06:19

标签: gcc windows-7 mingw msvcrt microsoft-runtime-library

我正在使用Windows 7和最新的MinGW版本(gcc v4.7.2)。

我的问题是,触发MinGW使用“MSVCR100”和“MSVCP100”运行时dll用于简单的测试应用程序。

我的默认自定义规范文件如下所示:

  

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

(mingw发行版不会在lib目录中发送任何“MSVCP100.a”,所以我刚刚在“dumpbin”和“dlltool”的帮助下创建了我的“MSVCP100.a”文件。)< / p>

现在我的问题是,如果我编译我的简单测试应用程序(使用boost-date-time和boost-log),我会得到以下未定义的引用:

  • 对“gmtime”的未定义引用
  • 对“localtime”的未定义引用

但这不应该是可能的,因为我使用Visual Studio 2010编译我的测试应用程序并使用依赖步行器分析后面的二进制文件,我看,dll的“MSVCR100”和“MSVCP100”是引用的。< / p>

为什么我需要这个?我发现,我的测试应用程序在Windows XP上崩溃,但在Win7系统上崩溃,因为“msvcrt.dll”(v7.0.2600.5512)中的“setlocale”函数不是线程安全的(请检查我和boost.log维护者之间关于这个问题的对话:
Boost-Log)。所以我很好奇,如果我的测试应用程序也会崩溃,以防我用Visual Studio 2010编译它并在WinXP上测试二进制文件。我发现,没有崩溃,因为Vistual Studio将我的测试应用程序与“MSVCR100.dll”(和MSVCP100.dll)链接起来。

由于某些限制,无法将项目代码从MinGW迁移到Visual Studio。所以我试着改变mingw的specs文件来链接上面提到的dll。

问题:MinGW如何被触发,不再是“msvcrt.dll”的链接,而是“msvcrt100.dll”?或者更一般地说:如何触发MinGW使用与Visual Studio相同的运行时dll?

感谢任何帮助。到目前为止,谢谢,

圣拉斐尔

1 个答案:

答案 0 :(得分:0)

尝试使用:

  

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