2

我希望能够使用 mingw-w64 来构建链接到 Visual Studio 2015+ 而不是 MSVCRT.lib 可用的通用 CRT 的二进制文件。mingw-w64 v6.0.0的发行说明包括以下内容:“感谢 Martin Storsjö,支持 UCRT 的大量新增内容”

不幸的是,我的搜索没有显示有关如何使用此支持的文档。

有谁知道我需要提供哪些选项以及在哪里提供它们?

4

1 回答 1

6

好吧,我已经和VS 2017一起完成了。但据我了解,VS 2015VS 2017都使用VCRUNTIME140.DLL,所以这里不用担心。

它分为两个步骤:

1. 创建一个导入库VCRUNTIME140.DLL

这是通过执行以下操作来完成的:

mkdir scratch; cd scratch
cp C:/Windows/System32/vcruntime140.dll .
dumpbin /exports vcruntime140.dll > exports.txt
echo LIBRARY VCRUNTIME140 > vcruntime140.def
echo EXPORTS >> vcruntime140.def
tail +20 exports.txt | head -n -10 | awk '{print $4}' >> vcruntime140.def
lib /def:vcruntime140.def /out:libvcruntime140.a /machine:x86
cp libvcruntime140.a $(MINGW_ROOT)/i686-w64-mingw32/lib

2. 改变MinGW GCC操作的方式来链接VCRUNTIME140UCRT不是MSVCRT

gcc -dumpspecs > $(MINGW_ROOT)/lib/gcc/i686-w64-mingw32/$(GCC_VERSION)/specs
  1. 添加-D_UCRT到specs 文件的cppcc1plus部分。这将防止scanf函数系列的未定义引用链接错误。检查我的另一个问题
  2. 在规范文件的部分中替换-lmsvcrt为。-lvcruntime140 -lucrtlibgcc

请与您拥有MinGW$(MINGW_ROOT)的位置交换。

笔记:

  • 我包含的路径中的平台签名部分i686-w64-mingw32可能因您的情况而异。我相信基于架构。所以你可能需要相应地修改它。
  • 您需要使用$(MINGW_ROOT)/i686-w64-mingw32/lib文件夹中的相对较新的MinGW。我正在使用MinGW 7.0.0GCC 7.4.0libucrt.a
于 2019-11-14T13:22:25.910 回答