這是在Windows 7上運行時隨Dev-C++附帶的編譯器「TDM-GCC 4.9.2 64位版本」。同樣的事情也發生在64位版本中。 「編譯器選項」中的「在調用鏈接器時添加以下標誌」設置爲-static-libgcc -lws2_32
,「在調用編譯器時添加以下標誌」爲std=c++11
。TDM-GCC引發錯誤:對我從未調用的方法的未定義引用
不幸的是,我得不到更多的信息,因爲這是一個非常非常非常鎖定的計算機。
一旦我回家,我會在那裏測試它並編輯任何新的信息。
測試文件:
#include <windows.h>
#include <psapi.h>
#include <iostream>
int main() {
HANDLE h = GetCurrentProcess();
TCHAR name[100];
GetProcessImageFileName(h, name, 100);
std::cout << "Name is " << std::endl;
}
在編譯時,它提供了以下錯誤:
C:\Users\[REDACTED]\AppData\Local\Temp\ccQz3L9P.o:test.cpp:(.text+0x2f): undefined reference to `GetProcessImageFileNameA'
是最好的,我可以告訴大家,它調用GetProcessImageFileNameA
而不是GetProcessImageFileName
因爲在psapi.h
#define
的:
#define GetProcessImageFileName __MINGW_NAME_AW(GetProcessImageFileName)
__MINGW_NAME_AW(func)
是#define
d在_mingw_unicode.h
作爲func##A
,如果我正確理解它是新的方法名稱來自何處。
返回psapi.h
,DWORD WINAPI GetProcessImageFileNameA(HANDLE, LPSTR, DWORD);
已聲明,但我沒有在任何地方找到它的定義,並且Dev-C++也不能。我相當確定這是問題所在。
我該如何解決?只要我可以將我在閃存驅動器上使用的任何東西放在一起,並儘可能少地帶來煩惱,我就可以接受任何事情,包括切換編譯器或IDE,並且最終結果不需要管理員運行權限。
在你用來鏈接的導入庫中發現「定義」(就像找到所有其他內核的Windows API函數一樣)在kernel32.lib中。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms683217%28v=vs.85%29.aspx。那麼這個導入庫與Dev-C++在哪裏? (順便說一句,*不是編譯器,它是一個IDE)。 – PaulMcKenzie