VC runtime 2017 中用于 MinGW 7 的 scanf 函数系列的位置
Location of scanf function family in VC runtime 2017 to be used in MinGW 7
我正在使用:
- 对比 2017
- MinGW GCC/G++ 7.4.0.
基本上发生的事情如下:
- 一个可执行文件是使用 VS 2017 构建的
- .so 是用 GCC 构建的
- .so 由步骤 1 中创建的可执行文件加载
问题源于 MSVCRT
。 MinGW 默认情况下 links 反对 MSVCRT.DLL
并且使用 VS 2017 创建的可执行文件使用 VCRUNTIME140.DLL
和 UCRTBASE.DLL
.
加载 .so
时,存在两个 CRT,一个来自 MSVCRT.DLL
,另一个来自 VCRUNTIME140.DLL
和 UCRTBASE.DLL
。这会在应用程序运行时导致随机 issues/memory 问题。
解决方案是让 MinGW link 对抗 VCRUNTIME140.DLL
而不是 MSVCRT.DLL
。我已经通过从 VCRUNTIME140.DLL
创建一个导入库并将其添加到 MinGW 并转储 GCC 规范并修改它来做到这一点link 到 VCRUNTIME140.DLL
和 UCRTBASE.DLL
.
我现在的问题是 scanf
系列功能。我似乎无法在 VCRUNTIME140.DLL
或 UCRTBASE.DLL
.
中找到 scanf 函数
scanf
家族现在在全新的 UCRT 中处于什么位置?
所以,我刚刚编译了一个使用 scanf
的小测试应用程序,并使用 VS 2017 编译它,发现它使用 API-MS-WIN-CRT-STDIO-L1-1-0.DLL 然后使用 UCRTBASE.DLL for scanf
以这种方式出现 __stdio_common_vscanf
.
我现在很迷茫。 MinGW GCC 是否有任何一种干净的方法来引用 scanf
函数?
我能够通过仅将 -D_UCRT
添加到 cpp 和 cc1plus[ 来消除链接期间未定义的 scanf
错误=27=] GCC 规范文件的部分。
我在检查了 mingw src\mingw-w64\mingw-w64-crt\stdio
的 stdio 文件夹中的源代码和 MinGW sourceforge 的讨论论坛中的一些线程后找到了这个解决方案。
MinGW stdio.h
有 #ifdef _UCRT
围绕 scanf
相关函数。
我正在使用:
- 对比 2017
- MinGW GCC/G++ 7.4.0.
基本上发生的事情如下:
- 一个可执行文件是使用 VS 2017 构建的
- .so 是用 GCC 构建的
- .so 由步骤 1 中创建的可执行文件加载
问题源于 MSVCRT
。 MinGW 默认情况下 links 反对 MSVCRT.DLL
并且使用 VS 2017 创建的可执行文件使用 VCRUNTIME140.DLL
和 UCRTBASE.DLL
.
加载 .so
时,存在两个 CRT,一个来自 MSVCRT.DLL
,另一个来自 VCRUNTIME140.DLL
和 UCRTBASE.DLL
。这会在应用程序运行时导致随机 issues/memory 问题。
解决方案是让 MinGW link 对抗 VCRUNTIME140.DLL
而不是 MSVCRT.DLL
。我已经通过从 VCRUNTIME140.DLL
创建一个导入库并将其添加到 MinGW 并转储 GCC 规范并修改它来做到这一点link 到 VCRUNTIME140.DLL
和 UCRTBASE.DLL
.
我现在的问题是 scanf
系列功能。我似乎无法在 VCRUNTIME140.DLL
或 UCRTBASE.DLL
.
scanf
家族现在在全新的 UCRT 中处于什么位置?
所以,我刚刚编译了一个使用 scanf
的小测试应用程序,并使用 VS 2017 编译它,发现它使用 API-MS-WIN-CRT-STDIO-L1-1-0.DLL 然后使用 UCRTBASE.DLL for scanf
以这种方式出现 __stdio_common_vscanf
.
我现在很迷茫。 MinGW GCC 是否有任何一种干净的方法来引用 scanf
函数?
我能够通过仅将 -D_UCRT
添加到 cpp 和 cc1plus[ 来消除链接期间未定义的 scanf
错误=27=] GCC 规范文件的部分。
我在检查了 mingw src\mingw-w64\mingw-w64-crt\stdio
的 stdio 文件夹中的源代码和 MinGW sourceforge 的讨论论坛中的一些线程后找到了这个解决方案。
MinGW stdio.h
有 #ifdef _UCRT
围绕 scanf
相关函数。