2013-03-29 172 views
7

我正在使用Windows 8/Visual Studio 2012,C++ 11和Direct3D 11進行開發。找不到d3dx11.lib?

我包括Direct3D的圖書館這樣

#pragma comment(lib, "dxgi.lib") 
#pragma comment(lib, "d3d11.lib") 
#pragma comment(lib, "d3dx11.lib") // <-- error LNK1104: cannot open file 'd3dx11.lib' 
#pragma comment(lib, "d3dx10.lib") 

但是,鏈接似乎無法找到d3dx11.lib。在將庫所在的路徑添加到項目的「庫目錄」後,鏈接程序仍然找不到這些文件。即使我將lib文件複製到項目目錄本身後,它也不起作用。

我從2010年6月起安裝了Windows 8 SDK以及DirectX SDK。我錯過了什麼嗎?

+0

您確定「D3DX11」lib文件包含在您正在複製的文件中嗎?我想你可以鏈接它,但D3DX實用程序庫不再被支持 - 事實上,你根本不需要下載2010 SDK。 D3DX已被DirectXMath庫(XMMath)所取代。轉換有點痛苦,但不是太糟糕。 –

+0

好的。不知道。我對D3D11相當陌生。我將看到如何在沒有這個庫的情況下做到這一點。 – bytecode77

+0

有時候D3DX是要走的路(我不使用DirectXMath,因爲它與CUDA互操作複雜)。另外,DirectXMath的一些接口對於移植(例如初始化)來說很差。你有沒有找到解決辦法? (一種堅持使用Windows SDK並整齊訪問D3DX的方法?) – axon

回答

8

當這個處理我自己,我開始在這裏:

Where is the DirectX SDK?

然後 - 在該頁面的中間,閱讀DirectXMath:

DirectXMath

這是非常簡單,只是包括正確的頭文件和將「D3DX」前綴更改爲「XM」。不是那麼簡單,但這是總體思路。

你的第一個項目將可能有類似這樣的夾雜物/ usings:

#include <d3d11.h> 
#include 「DirectXMath.h」 
#include 「DirectXPackedVector.h」 

using namespace DirectX; 
using namespace DirectX::PackedVector; 

struct mystruct 
{ 
    DirectX::XMFLOAT3 position; 
    DirectX::PackedVector::HALF packedValue; 
}; 

當然,它不會被認爲是最佳的做法有「使用命名空間」,但在這一個例子中,我發現「的DirectX :: 「在我的程序的每一行都讓我的程序幾乎不可能(對我來說)閱讀 - 所以我去了」使用「。

祝你好運!

+0

它說DirectXMath適用於Windows 8或更高版本。有什麼可以用於Windows Vsta/7嗎? – bytecode77

+0

此外,我還沒有找到任何不使用d3dx的教程。你能指點我一個不使用這個depricated庫嗎? – bytecode77

+0

我用它與Win7沒有麻煩。我能找到的唯一教程是MS(http://code.msdn.microsoft.com/windowsdesktop/Direct3D-Tutorial-Win32-829979ef),這足以讓我走了。如果你真的不想使用XM,當然你應該可以鏈接到D3DX11.lib和DX10支持等等(就像你的OP一樣)。但是因爲你剛剛開始,不妨使用當前的庫。 –

1

也許你包括在性能不好的路徑,而不是 「* DirectxSDK /庫/ x86」,則包括 「」 * DirectxSDK/lib目錄」。

+0

它看起來像一個評論。 –

0

我只是遇到這個問題,使用VS2010爲好,但我。找到了解決辦法,您需要提供的鏈接與您有麻煩庫文件

項目 - >屬性 - >配置屬性 - >鏈接 - >附加庫目錄

然後添加庫文件,你想在那裏爲我工作,希望也適合你,然後你就不必亂用DirectXMath併爲它找到新的教程。