2014-11-06 110 views
2

我想使用「GetProcessImageFileName」檢索遠程進程的名稱。然而,海灣合作委員會(MinGW的)連接失敗,出現以下錯誤(S):GCC(MinGW)鏈接器嘗試使用GetProcessImageFileName時失敗

<source_file>.c: In function '<function_name>': 
warning: implicit declaration of function 'GetProcessImageFileName' [-Wimplicit-function-declaration] 
GetProcessImageFileName(hProcess, szProcessName, MAX_PATH); 
^ 
undefined reference to `GetProcessImageFileName' 
collect2.exe: error: ld returned 1 exit status 

我試過用「-lPsapi」和「-lKernel32」編譯,但我得到了相同的結果。 「GetProcessImageFileName」在「Psapi.h」中聲明。

我使用的是Windows 7 Professional 64位和GCC 4.8.1的機器。任何想法發生了什麼?

+0

我能想到的唯一的事情,實際上並沒有嘗試任何,爲你傳遞一個「窄」串入函數的Unicode版本。你是否定義了'UNICODE',什麼是'szProcessName'類型?我猜「是」和'char *'或'std :: string'。有些來源會很好。 – icabod 2014-11-06 10:57:10

+0

警告來自編譯器,而不是鏈接器,這意味着'GetProcessImageFileName'尚未被聲明。所以你需要包含正確的標題。如果該函數不在標題中,則可能需要更新版本的mingw,否則mingw本身可能需要更新。 – arx 2014-11-06 11:57:14

+0

@arx Vanilla MinGW在XP中幾乎沒有什麼新東西,比如'GetProcessImageFileName()'。如果這是XerZetZip正在使用的,他將需要切換到mingw-w64。很遺憾,我們今天仍然對使用錯誤的MinGW的人有這個問題... – andlabs 2014-11-06 14:45:13

回答

1

確保您將宏_WIN32_WINNT定義爲larger or equal0x0501(Windows XP,最低系統支持GetProcessImageFileName)。無論是使用交換機-D_WIN32_WINNT=0x0501或者包括頭前:

#define _WIN32_WINNT 0x0501 
#include <Windows.h> 
#include <Psapi.h> 
+0

謝謝。它現在有效... – XerZetZip 2014-11-07 02:20:32