对CreateProcessWithLogonW的未定义引用

对CreateProcessWithLogonW的未定义引用,c,winapi,mingw,C,Winapi,Mingw,所以我一直在开发一个小应用程序,在一些运行中,它以另一个用户的身份运行应用程序,我用C编写它,并使用MinGW GCC编译器编译和链接它。我的问题是,每当我尝试使用WINAPI函数CreateProcessWithLogonW()时,都会出现一个错误,上面写着“未定义对CreateProcessWithLogonW()的引用” 尽管我这样编译Advapi32时链接了它 gcc file.c -lAdvApi32 -o filename 请尝试直接链接有问题的dll,如下所示: gcc文件.c%

所以我一直在开发一个小应用程序,在一些运行中,它以另一个用户的身份运行应用程序,我用C编写它,并使用MinGW GCC编译器编译和链接它。我的问题是,每当我尝试使用WINAPI函数CreateProcessWithLogonW()时,都会出现一个错误,上面写着“未定义对CreateProcessWithLogonW()的引用”

尽管我这样编译Advapi32时链接了它

gcc file.c -lAdvApi32 -o filename

请尝试直接链接有问题的dll,如下所示:

gcc文件.c%windir%\system32\advapi32.dll-o文件名


当您使用开关-lAdvApi32时,您将从MinGW/lib链接libadvapi32.a。可悲的是,我无法回答为什么这不起作用;也许这个库已经过时了,或者具有完全不同的含义

正确的解决方案是实际包含正确的mingw32头:即

#include <windows.h>
#包括

尽管Anthales提出的解决方案可行,但它的扩展性并不好。

只是一个猜测。尝试将
-lAdvApi32
放在命令末尾。类似于,
gcc-o filename file.c-lAdvApi32
感谢您的建议,但这似乎并没有改变它的编译方式,仍然会出现错误。@Betlander我建议使用
-Wall
编译器标志,因为这将警告隐式声明,事实证明,这是您遇到的真正问题。啊,所以这实际上只是一个不兼容的隐式声明,而不是链接器问题;我只想到了最后一件事。