2011-04-06 86 views
1

我已包含windows.h。它甚至工作正常和罰款,如果我只是註釋掉HWND,HDC,HBITMAP,GetBitmapBits()等。我想我需要包括正確的LIB?包含哪些LIB?它是-lgdi32HWND上的Qt鏈接器錯誤,HDC

錯誤消息: :: error: collect2: ld returned 1 exit status

編輯 加入LIBS += -lgdi32後沒有鏈接錯誤併成功編譯。所以它解決了我的想法!或者是嗎?

+0

你的問題應該至少包括錯誤消息。 – rohanpm 2011-04-06 10:42:14

+0

嗯,我認爲這是一個衆所周知的問題。我添加了錯誤消息。檢查編輯請 – 2011-04-06 11:13:40

+0

而不是編輯解決方案到您的問題,你應該增加,而不是你的問題的答案。你可以接受你自己的答案,尤其是你修正了自己的問題。另外,你在問題中輸入的錯誤信息非常模糊;所有這些都說*有一個錯誤,而不是錯誤。請參閱下面的答案,瞭解@ Friend-Pal要求提供的示例。 – Tadmas 2011-04-09 00:09:54

回答

2

儘管您在編輯問題時有解決方案,但我認爲這可能有助於說明您將來如何解決這些問題。

當鏈接器發生錯誤時,可能意味着您正在嘗試引用無法找到的可執行代碼。應該是一個系列的線條上述錯誤的。你報哪個特定功能進行了造成問題的原因,如狀態:

foo.obj:錯誤LNK2019:解析外部符號_GetBitmapBits @ 12函數引用.. 。

對於您的特定鏈接器,輸出可能略有不同。它可能會包含短語「未解決的外部」。這些錯誤是@ Friend-Pal實際上要求的。

當你得到一個未解析的外部引用時,你可以通過鏈接到相應的庫來修復它。要確定哪個庫包含哪個函數,請查看文檔。例如,在底部GetBitmapBits狀態的文檔:

最低支持的客戶端:Windows 2000專業版
最低支持的服務器:Windows 2000 Server的
標題:WINGDI.H(包括WINDOWS.H)
圖書館:GDI32.LIB
DLL:GDI32.DLL

添加庫引用的方法取決於你使用的是特定的鏈接。在你的情況下,基於對你的問題的編輯,這應該是-lgdi32鏈接到gdi32.lib庫。

重複此過程,直到解決所有參考。

數據類型(HWND,HDC,HBITMAP等)只需要相應的頭文件;它們沒有任何與它們關聯的實際可執行代碼,所以它們不會影響鏈接器。

+0

謝謝。我不知道爲什麼編譯器沒有激發Single unresolved引用錯誤。然後我做了一個瘋狂的猜測,認爲windows.h函數可能會導致一個問題。 – 2011-04-09 05:19:57

0

除了有關查找MSDN看你需要,使用Qt的時候可以定義庫未做更改連接標誌該庫中的答案被Tadmas等

  • 如果你是使用微軟的編譯器,添加例如LIBS += Gdi32.lib行到.pro文件就足夠了。完成!

  • 如果您使用GCC,則應提供lib文件的完整路徑,例如LIBS += "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib/Gdi32.lib"

  • 如果您有一個針對32位和64位GCC構建的項目(並且您在Windows上構建了具有64位GCC的Qt),則應在.pro文件中使用條件範圍determine if you are building for 32-bit or 64-bit並在64位版本中提供64位lib文件的路徑。 e.g:

    win32-g++:!contains(QMAKE_HOST.arch, x86_64) { 
        LIBS += "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib/Gdi32.lib" 
    } else { 
        LIBS += "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib/x64/Gdi32.lib" 
    }