Расположение семейства функций scanf в среде выполнения VC 2017 для использования в MinGW 7

Я использую:

  • VS 2017
  • MinGW с GCC/G++ 7.4.0.

В основном происходит следующее:

  1. Исполняемый файл построен с использованием VS 2017
  2. .So построен с GCC
  3. .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 связанные функции.

Другие вопросы по тегам