首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将MinGW的规范文件更改为针对MSVCR100.dll和MSVCP100.dll的链接?

如何将MinGW的规范文件更改为针对MSVCR100.dll和MSVCP100.dll的链接?
EN

Stack Overflow用户
提问于 2013-06-18 14:06:18
回答 1查看 1.2K关注 0票数 3

我使用的是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),我将得到以下未定义的引用:

  • 未定义的对“`gmtime”的引用
  • 未定义的对“本地时间”的引用

但是这是不可能的,因为如果我用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?

任何帮助都是非常感谢的。到目前为止谢谢你,

拉斐尔

EN

回答 1

Stack Overflow用户

发布于 2013-10-30 23:04:58

试一试:

%{ -lmingw32 %{共享-libgcc:-lgcc _s}%{!共享-libgcc:-lgcc_eh}-lgcc -lmoldname100 -lmingwex -lmsvcr100 -lmsvcp100

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17171050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档