_wdupenv_s()
было очевидно введено в CRT Visual Studio 2008 ( msvcr90 ), но, похоже, оно не вошло в CRT системы ( msvcrt ). GCC mingw-w64 обычно по умолчанию связывают только с CRT системы, поэтому ld
не может найти символ.
Вы можете попробовать явно установить связь с CRT Visual Studio, но учтите, что это может привести к ошибкам. последствия, потому что результирующие двоичные ссылки как на CRT, так и на смешивающие CRT, как известно, вызывают проблемы.
gcc -municode launcher.c -o launcher.exe -lversion -lmsvcr120
Если ваша цепочка инструментов имеет эту функцию (ту, которая создана в MSYS2), вы можете заменить системную CRT на Visual Studio CRT полностью:
gcc -municode -mcrtdll=msvcr120 launcher.c -o launcher.exe -lversion
Я также добавил аргумент -municode
, в противном случае я получаю неопределенную ссылку на WinMain.
Также обратите внимание, что в файлы сборки есть 4 двоичных файла, построенных из launcher.c
, каждый со своим собственным набором определений:
[...] -o pylauncher.exe -D_CONSOLE
[...] -o pywlauncher.exe -D_WINDOWS
[...] -o venvlauncher.exe -D_CONSOLE -DVENV_REDIRECT
[...] -o venvwlauncher.exe -D_WINDOWS -DVENV_REDIRECT
Вам, вероятно, следует использовать один из этих наборов при компиляции.
Если вы сделаете еще несколько шагов, у вас может даже появиться хороший значок и материал:
copy /y ..\Include\patchlevel.h pythonnt_rc.h
echo #define FIELD3 106 >> pythonnt_rc.h
echo #define MS_DLL_ID "10.0" >> pythonnt_rc.h
echo #define PYTHON_DLL_NAME "foopython3.dll" >> pythonnt_rc.h
windres -I..\Include -I. pylauncher.rc -o pylauncher.o
gcc -municode -mcrtdll=msvcr120 -D_CONSOLE launcher.c pylauncher.o -o pylaunc
her.exe -lversion