2009-10-08 74 views
0

VS C++ 2008編譯指示和包括標題/庫

我只是通過DirectX教程。

在源代碼中有這樣一行:

#pragma comment (lib, "d3d9.lib") 

當我整理了一切聯繫確定。

不過,我評論了這條線,並試圖包括根據屬性頭文件和庫自己,就像這樣:

C/C++ - General 
Additional include directories: "C:\Program Files\Microsoft DirectX SDK (August 2009)\Include" 

Linker - General 
Additional library directories: "C:\Program Files\Microsoft DirectX SDK (August 2009)\Lib\x64" 
Linker - Input: d3d9.lib 

不過,我得到這個連接錯誤:

1>main.obj : error LNK2019: unresolved external symbol [email protected] referenced in function _initD3D 

然而,當我只使用編譯指示時,我沒有收到任何鏈接錯誤。只有當我嘗試將它們包含在上面的屬性中。

使用編譯指示和包含使用合適的標題/庫的真正區別是什麼?

非常感謝,

回答

3

起初的#pragma評論(LIB)僅僅是鏈接器的配置

在第二,該SDK應該是路徑,所以不要設置附加庫目錄(你可以將其覆蓋錯誤的版本),只需將d3d9.lib添加到鏈接器的輸入。

+0

是的。這是正確的。我刪除了路徑,並只有連接器輸入的名稱。 – ant2009 2009-10-08 15:09:33

1

據我所知,沒有區別。編譯指示庫簡單地告訴鏈接程序按名稱查找特定的庫。

另外,由於路徑未在編譯指示中指定,鏈接器依賴於項目的當前lib路徑。嘗試不添加任何路徑到您的鏈接器選項(默認情況下,DX SDK添加到任何已安裝的Visual Studio的路徑,直接修改全局Visual Studio路徑。請參閱工具/選項/項目和解決方案/ VC++目錄/顯示目錄庫文件)

有些事情要檢查:

  • 您確實建立了64
  • 你的道路是真正指向DX SDK(它被安裝到了Program Files(x86)的,如果你是64位)
  • 驗證是否沒有其他鏈接器警告
+0

感謝您的信息。如果我添加一個沒有作爲SDK安裝的庫。我想我將不得不寫完整的路徑到編譯指示庫? 只是另一個問題,因爲編譯指示是編譯器特定的。使用雜注不是更好嗎?謝謝。 – ant2009 2009-10-08 15:12:26

+1

是的,編譯指示是編譯器特定的。我幾乎從不使用它。爲了鏈接一個沒有添加到VS路徑的庫,你仍然會嘗試抽象完整的路徑,因爲你可能想要在其他機器上使用不同的配置來構建它。因此,通常要麼使用項目相對路徑,要麼使用一些環境變量相對路徑。 – Bahbar 2009-10-08 15:32:01