Расположение семейства функций scanf в среде выполнения VC 2017 для использования в MinGW 7
Я использую:
- VS 2017
- MinGW с GCC/G++ 7.4.0.
В основном происходит следующее:
- Исполняемый файл построен с использованием VS 2017
- .So построен с GCC
- .So загружается исполняемым файлом, созданным на шаге 1.
Проблема связана с MSVCRT
. MinGW по умолчанию ссылается наMSVCRT.DLL
а исполняемый файл, созданный с помощью VS 2017, используетVCRUNTIME140.DLL
а также UCRTBASE.DLL
.
Когда .so
загружено два ЭЛТ существует один из MSVCRT.DLL
а другой из VCRUNTIME140.DLL
а также UCRTBASE.DLL
. Это вызывает случайные проблемы / проблемы с памятью во время выполнения приложения.
Решением для этого является наличие ссылки MinGW наVCRUNTIME140.DLL
вместо того MSVCRT.DLL
. Я сделал это, создав библиотеку импорта изVCRUNTIME140.DLL
добавил его в MinGW, сбросил спецификации GCC и изменил его, чтобы он был связан сVCRUNTIME140.DLL
а также UCRTBASE.DLL
.
Моя проблема сейчас в scanf
семейные функции. Кажется, я не могу найти функции scanf вVCRUNTIME140.DLL
или UCRTBASE.DLL
.
Где scanf
семья лежит теперь во всей новой вещи UCRT?
Итак, я только что скомпилировал небольшое тестовое приложение, которое использует scanf
и скомпилировал его с помощью VS 2017 и обнаружил, что он использует API-MS-WIN-CRT-STDIO-L1-1-0.DLL, который затем использует UCRTBASE.DLL дляscanf
который появляется таким образом __stdio_common_vscanf
.
Я сейчас так запуталась. Есть ли какой-нибудь чистый способ ссылкиscanf
функции MinGW GCC?
1 ответ
Я смог избавиться от неопределенного scanf
ошибки при связывании только добавлением -D_UCRT
в CPP и cc1plus частей НКУ файла спецификации.
Я пришел к этому решению после проверки источников, найденных в папке stdio mingw src\mingw-w64\mingw-w64-crt\stdio
и некоторые темы в дискуссионном форуме MinGW sourceforge.
MinGW stdio.h
было #ifdef _UCRT
около scanf
связанные функции.