Почему модули расширения Python должны быть скомпилированы с MSVC в Windows? - PullRequest
0 голосов
/ 19 мая 2019

Я много раз упоминал, что модули расширения Python в Windows должны быть собраны с MSVC.Здесь также упоминается:

https://docs.python.org/3/extending/windows.html

Windows Python построен в Microsoft Visual C ++;использование других компиляторов может или не может работать (хотя Borland кажется).Остальная часть этого раздела посвящена MSVC ++.

Я хочу получить техническое понимание того, почему это необходимо.Какие конкретные вещи могут пойти не так при использовании MinGW-w64?При каких обстоятельствах все пойдет не так?Имеет ли значение, если модуль написан на C или C ++?Я ищу отправную точку для дальнейших исследований, общий обзор или, что лучше всего: ссылки.

Обратите внимание, что я не очень знаком с разработкой для Windows.


Моя мотивация задать этот вопрос - понять, насколько велик риск, компилируя с MinGW, когда вещи кажутся работающими.Некоторые зависимости могут быть особенно сложными для компиляции с MSVC, но легко работать с MSYS / MinGW.

1 Ответ

2 голосов
/ 19 мая 2019

Причина в том, что каждый выпуск Microsoft Visual Studio поставляется со своей собственной средой выполнения, MSVCRTxx.DLL, и не существует общесистемной библиотеки C, как в Linux. Поскольку более новая версия MSVCRT не распространяется свободно, она не может использоваться MinGW. Вместо этого MinGW использует старую MSVCRT.DLL, которая даже не поддерживает большинство функций C99.

Невозможно совместимо связать код, скомпилированный с разными версиями MSVC ++ (используя разные среды выполнения), поэтому неизбежно, что код, созданный MinGW, который в основном совместим с MSVC6.0, не может быть связан вместе с Python, скомпилированным с помощью компилятора C / C ++ из VS 2015 или 2017.

Больше информации здесь .

...