方法 1如果要使用cl.exe
从命令行编译,可以使用选项指定链接器选项:/link
cl /TC program.c /link psapi.lib
方法 2
以下 pragma 指令使链接器在链接时在源文件中搜索 psapi.lib 库。
#pragma comment( lib, "psapi.lib" )
如果链接器的其他库列表中缺少 psapi.lib,则可能导致您的错误的原因。
要解决此问题,请使用以下/LIBPATH选项:
cl /TC program.c /link Psapi.Lib /LIBPATH:C:\MyLibFolder\
其中C:\MyLibFolder指定文件夹的路径,其中包含您的 psapi.lib 。
此外,您可以尝试设置正确的/SUBSYSTEM选项。
对于控制台应用程序使用:
/SUBSYSTEM:CONSOLE
类似问题的解决方案在这里。
使用GetModuleInformation函数的示例:
#include <windows.h>
#include <stdio.h>
#include <psapi.h>
#pragma comment( lib, "psapi.lib" )
int main(void)
{
MODULEINFO minfo = {0};
GetModuleInformation( GetCurrentProcess(), GetModuleHandle( "psapi.dll" ), &minfo, sizeof(minfo) );
/* printf("%X", minfo.lpBaseOfDll); /* The load address of the module */
return 0;
}
该代码已在 Windows 7 和 XP 上进行了测试。
链接会话的输出是:
program.c
/out:program.exe
psapi.lib
/LIBPATH:C:\MyLibFolder\
/SUBSYSTEM:CONSOLE
/VERBOSE
program.obj
Starting pass 1
Processed /DEFAULTLIB:uuid.lib
Processed /DEFAULTLIB:LIBCMT
Processed /DEFAULTLIB:OLDNAMES
Searching libraries
Searching C:\MyLibFolder\psapi.lib:
Found _GetModuleInformation@16
Referenced in program.obj
Loaded psapi.lib(PSAPI.DLL)
Found __IMPORT_DESCRIPTOR_PSAPI
Referenced in psapi.lib(PSAPI.DLL)
Loaded psapi.lib(PSAPI.DLL)
Found __NULL_IMPORT_DESCRIPTOR
Referenced in psapi.lib(PSAPI.DLL)
Loaded psapi.lib(PSAPI.DLL)
...
如果正确设置了 vsvars32.bat 和 Visual Studio 中所有适当的环境变量,则上述链接器选项将生成有效的可执行 (.exe) 文件。