g++;使用链接库进行编译 我是G+的新手,我正在尝试编译/运行这个页面上找到的C++代码示例:

g++;使用链接库进行编译 我是G+的新手,我正在尝试编译/运行这个页面上找到的C++代码示例: ,c++,g++,libraries,.lib,psapi,C++,G++,Libraries,.lib,Psapi,使用 g++ -o ex.exe ex.cpp 不起作用,所以我很确定我遗漏了一些东西,比如我需要链接Psapi库,或者正如代码所说的“将Psapi.lib添加到TARGETLIBS”。 我下载了所有包含的头文件,并将它们放在同一个目录中,但是使用上面的g++行编译该文件会导致以下错误,这让我觉得我忘记了在g++行中包含必要的psapi库 undefined reference to `EnumProcessModules@16' undefined reference to `GetModu

使用

g++ -o ex.exe ex.cpp
不起作用,所以我很确定我遗漏了一些东西,比如我需要链接Psapi库,或者正如代码所说的“将Psapi.lib添加到TARGETLIBS”。 我下载了所有包含的头文件,并将它们放在同一个目录中,但是使用上面的g++行编译该文件会导致以下错误,这让我觉得我忘记了在g++行中包含必要的psapi库

undefined reference to `EnumProcessModules@16'
undefined reference to `GetModuleBaseNameA@16'
undefined reference to `EnumProcesses@12'
代码:

#包括
#包括
#包括
#包括
//为确保符号的正确分辨率,请将Psapi.lib添加到TARGETLIBS
//并使用-DPSAPI_VERSION=1进行编译
无效PrintProcessNameAndID(DWORD processID)
{
TCHAR szProcessName[MAX_PATH]=文本(“”);
//掌握这个过程。
HANDLE hProcess=OpenProcess(进程\查询\信息|
进程_VM _READ,
FALSE,processID);
//获取进程名称。
if(NULL!=hProcess)
{
hmodulehmod;
德沃德;
if(enumProcessModule(hProcess,&hMod,sizeof(hMod)),
&CBP(需要)
{
GetModuleBaseName(HPProcess、hMod、szProcessName、,
sizeof(szProcessName)/sizeof(TCHAR));
}
}
//打印进程名称和标识符。
_tprintf(文本(“%s(PID:%u)\n”)、szProcessName、processID);
//释放进程的句柄。
CloseHandle(hProcess);
}
内部主(空)
{
//获取进程标识符的列表。
DWORD APROCESS[1024],CBREQUIRED,CPROCESS;
无符号整数i;
if(!EnumProcesses(a进程、sizeof(a进程)和cbNeeded))
{
返回1;
}
//计算返回了多少进程标识符。
cprocess=cbNeeded/sizeof(DWORD);
//打印每个进程的名称和进程标识符。
对于(i=0;i
您忘了链接库。尝试使用以下工具进行编译:

g++ ex.cpp -lPsapi -DPSAPI_VERSION=1 -o ex.exe 
g++ ex.cpp -lPsapi -DPSAPI_VERSION=1 -o ex.exe