我在用:
- VS 2017
- MinGW 与 GCC/G++ 7.4.0。
基本上发生的事情如下:
- 使用 VS 2017 构建可执行文件
- .so 是用 GCC 构建的
- .so 由步骤 1 中创建的可执行文件加载
问题源于MSVCRT
. MinGW默认情况下链接MSVCRT.DLL
以及使用创建的可执行文件VS 2017 uses VCRUNTIME140.DLL
and UCRTBASE.DLL
.
当。。。的时候.so
已加载两个 CRT,其中一个来自MSVCRT.DLL
另一个来自VCRUNTIME140.DLL
and UCRTBASE.DLL
。这会导致应用程序运行时出现随机问题/内存问题。
解决方案是MinGW链接反对VCRUNTIME140.DLL
代替MSVCRT.DLL
。我通过创建一个导入库来做到这一点VCRUNTIME140.DLL
将其添加到MinGW并倾倒了GCC规格并修改它以使其链接到VCRUNTIME140.DLL
and UCRTBASE.DLL
.
我现在的问题是scanf
家庭职能。我似乎找不到里面的 scanf 函数VCRUNTIME140.DLL
or UCRTBASE.DLL
.
哪里有scanf
家人现在躺在全新的床上UCRT thing?
所以,我刚刚编译了一个小型测试应用程序,它利用scanf
并使用编译它VS 2017并发现它使用API-MS-WIN-CRT-STDIO-L1-1-0.DLL然后使用UCRTBASE.DLL for scanf
看起来像这样__stdio_common_vscanf
.
我现在很困惑。有没有一种干净的方法可以参考scanf
功能由MinGW海湾合作委员会?
我能够摆脱未定义的scanf
链接期间仅添加错误-D_UCRT
to cpp and cc1plus的部分GCC规格文件。
在检查 mingw 的 stdio 文件夹中找到的源代码后,我找到了这个解决方案src\mingw-w64\mingw-w64-crt\stdio
以及论坛中的一些主题MinGW来源锻造。
MinGW stdio.h
had #ifdef _UCRT
around scanf
相关功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)