【发布时间】:2013-06-14 19:06:03
【问题描述】:
我使用的是 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”,所以我刚刚在“MSVCP100.a”文件的“dumpbin”和“dlltool”的帮助下创建了。)
我现在的问题是,如果我编译我的简单测试应用程序(它使用 boost-date-time 和 boost-log),我会得到以下未定义的引用:
- 未定义对“gmtime”的引用
- 未定义对“本地时间”的引用
但这不应该是可能的,因为如果我使用 Visual Studio 2010 编译我的测试应用程序并使用依赖项walker 分析二进制文件,我看到引用了 dll 的“MSVCR100”和“MSVCP100”。
我为什么需要这个?我发现,我的测试应用程序在 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 的规范文件以链接到提到的 dll。
问题:如何触发 MinGW,不再链接到“msvcrt.dll”,而是链接到“msvcrt100.dll”?或更笼统地说:如何触发 MinGW 使用与 Visual Studio 相同的运行时 dll?
感谢任何帮助。到目前为止,谢谢,
拉斐尔
【问题讨论】:
-
Msvcr100.dll 不是一个库,它是一个 DLL。导入库名称为 msvcrt.lib 和 msvcprt.lib,需要 VS 许可。
-
感谢您的来信。我知道这一点。只是拼写错误!更新!
标签: gcc windows-7 mingw msvcrt microsoft-runtime-library