我正在使用 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 编译我的测试应用程序并在之后使用依赖遍历器分析二进制文件,我看到,引用了 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?
任何帮助表示赞赏。感谢到目前为止,
拉斐尔