2013-03-29 28 views
7

Tôi đang sử dụng Windows 8/Visual Studio 2012, C++ 11 và Direct3D 11 để phát triển.d3dx11.lib không tìm thấy?

tôi bao gồm các thư viện Direct3D như thế này

#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") 

Tuy nhiên, các mối liên kết dường như không thể tìm ra d3dx11.lib. Sau khi thêm đường dẫn nơi thư viện được đặt vào thư mục 'Thư viện' của dự án, trình liên kết vẫn không thể tìm thấy các tệp đó. Ngay cả sau khi tôi đã sao chép các tệp lib vào thư mục dự án, nó cũng không hoạt động.

Tôi đã cài đặt Windows 8 SDK cũng như SDK DirectX từ tháng 6 năm 2010. Tôi có thiếu gì không?

+0

Bạn có chắc chắn tệp "D3DX11" lib được đưa vào những tệp bạn đang sao chép không? Tôi cho rằng bạn có thể liên kết nó, nhưng thư viện tiện ích D3DX không còn được hỗ trợ - thực ra bạn không cần tải xuống SDK 2010 chút nào. D3DX đã được thay thế bằng thư viện DirectXMath (XMMath). Việc chuyển đổi là một chút đau đớn, nhưng không quá tệ. –

+0

Ok. Không biết điều đó. Tôi khá mới với D3D11. Tôi sẽ xem làm thế nào để làm điều đó mà không có lib này. – bytecode77

+0

Đôi khi D3DX là con đường để đi (tôi không sử dụng DirectXMath vì nó phức tạp interop với CUDA). Ngoài ra, một số giao diện cho DirectXMath kém để chuyển đổi (ví dụ: khởi tạo). Bạn đã tìm thấy một sửa chữa? (Một cách gắn bó với Windows SDK và truy cập gọn gàng D3DX?) – axon

Trả lời

8

Khi giao dịch với điều này bản thân mình, tôi bắt đầu ở đây:

Where is the DirectX SDK?

sau đó - trong khoảng giữa của trang đó, đọc về DirectXMath:

DirectXMath

Nó khá giống nhiều bao gồm các tệp tiêu đề phù hợp và thay đổi tiền tố "D3DX" thành "XM". Không hoàn toàn đơn giản, nhưng đó là ý tưởng chung.

chương trình đầu tiên của bạn có thể sẽ phải vùi/usings như thế này:

#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; 
}; 

Tất nhiên, nó không được coi là thực hành tốt nhất để có "using namespace", nhưng trong một trường hợp này, tôi phát hiện ra rằng "DirectX :: "trên mỗi dòng chương trình của tôi đã làm cho chương trình của tôi hầu như không thể (đối với tôi) để đọc - vì vậy tôi đã đi với" sử dụng ".

Chúc may mắn!

+0

Nó nói DirectXMath dành cho Windows 8 hoặc mới hơn. Có cái gì đó cũng có thể được sử dụng cho Windows Vsta/7? – bytecode77

+0

Ngoài ra, tôi chưa tìm thấy bất kỳ hướng dẫn nào không sử dụng d3dx. Bạn có thể chỉ cho tôi một cái không sử dụng thư viện được sửa đổi này không? – bytecode77

+0

Tôi đã sử dụng nó với Win7 mà không gặp khó khăn gì. Hướng dẫn duy nhất tôi có thể tìm thấy là của MS (http://code.msdn.microsoft.com/windowsdesktop/Direct3D-Tutorial-Win32-829979ef) và đó là đủ tốt để giúp tôi đi. Nếu bạn thực sự không muốn sử dụng XM, tất nhiên bạn sẽ có thể liên kết trong hỗ trợ D3DX11.lib và DX10, vv (như trong OP của bạn). Nhưng kể từ khi bạn chỉ mới bắt đầu, cũng có thể được sử dụng thư viện hiện tại. –

1

Có lẽ bạn đã bao gồm con đường xấu trong bất động sản, thay thế, "* DirectxSDK/Lib/x86", bạn đã bao gồm "" * DirectxSDK/Lib".

+0

nó trông giống như một bình luận. –

0

tôi đã chạy vào vấn đề này cũng sử dụng VS2010, nhưng tôi chỉ . tìm thấy giải pháp bạn cần phải cung cấp các Linker với các tập tin thư viện mà bạn đang gặp rắc rối với

dự án-> Properties-> Cấu hình Properties->Linker -.> bổ sung Thư viện Thư mục

Sau đó, thêm tập tin thư viện mà bạn muốn ở đó. Làm việc cho tôi, hy vọng cũng có tác dụng cho bạn, và sau đó bạn không phải gây rối với DirectXMath và tìm hướng dẫn mới cho nó.

Các vấn đề liên quan