对于 _wdupenv_s 我必须 link 哪个库
which lib do I have to link for _wdupenv_s
我下载python launcher
并尝试独立构建它。
我试过:
gcc launcher.c -lversion -o py.exe
gcc launcher.o -lversion -lWs2_32 -o py.exe
同时使用 posix/win32 mingw-w64 并遇到相同的错误:
(.text+0x1b02): undefined reference to `__imp__wdupenv_s'
collect2.exe: error: ld returned 1 exit status
我知道我必须再添加一个库 link,但我不知道是哪一个。
有人能帮忙吗?
或者提供一种方法来查找哪个库包含指定函数
_wdupenv_s()
显然已在 Visual Studio 2008 年的 CRT (msvcr90) 中引入,但它似乎没有进入系统 CRT ( msvcrt)。 mingw-w64 GCC 通常 link 仅默认为系统 CRT,这就是 ld
找不到符号的原因。
您可以尝试 link 显式 Visual Studio CRT,但请注意这可能会产生不良后果,因为生成的二进制 link 到 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 的未定义引用。
另请注意,在 the build files 中有 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
我下载python launcher 并尝试独立构建它。
我试过:
gcc launcher.c -lversion -o py.exe
gcc launcher.o -lversion -lWs2_32 -o py.exe
同时使用 posix/win32 mingw-w64 并遇到相同的错误:
(.text+0x1b02): undefined reference to `__imp__wdupenv_s'
collect2.exe: error: ld returned 1 exit status
我知道我必须再添加一个库 link,但我不知道是哪一个。 有人能帮忙吗? 或者提供一种方法来查找哪个库包含指定函数
_wdupenv_s()
显然已在 Visual Studio 2008 年的 CRT (msvcr90) 中引入,但它似乎没有进入系统 CRT ( msvcrt)。 mingw-w64 GCC 通常 link 仅默认为系统 CRT,这就是 ld
找不到符号的原因。
您可以尝试 link 显式 Visual Studio CRT,但请注意这可能会产生不良后果,因为生成的二进制 link 到 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 的未定义引用。
另请注意,在 the build files 中有 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