2013-03-29 23 views
7

Używam Windows 8/Visual Studio 2012, C++ 11 i Direct3D 11 do programowania.nie znaleziono d3dx11.lib?

I obejmują bibliotek Direct3D jak ten

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

Jednak łącznik nie może wydawać się znaleźć d3dx11.lib. Po dodaniu ścieżki, w której znajduje się biblioteka do "katalogów biblioteki" projektu, linker nadal nie może znaleźć tych plików. Nawet po tym, jak skopiowałem pliki lib do katalogu projektu, to nie działa.

Zainstalowałem zestaw Windows 8 SDK oraz pakiet DirectX SDK od czerwca 2010. Czy brakuje mi czegoś?

+0

Czy na pewno plik lib "D3DX11" jest dołączany do tych, które kopiujesz? Przypuszczam, że możesz go połączyć, ale biblioteka narzędziowa D3DX nie jest już obsługiwana - w rzeczywistości nie musisz w ogóle pobierać pakietu SDK 2010. D3DX został zastąpiony biblioteką DirectXMath (XMMath). Konwersja jest trochę uciążliwa, ale nie jest tak źle. –

+0

Ok. Nie wiedziałem o tym. Jestem całkiem nowy w D3D11. Zobaczę, jak to zrobić bez tej lib. – bytecode77

+0

Czasami D3DX jest drogą (nie używam DirectXMath, ponieważ komplikuje współdziałanie z CUDA). Ponadto, niektóre interfejsy dla DirectXMath są słabe do przenoszenia (na przykład inicjalizacji). Czy znalazłeś poprawkę? (Sposób na trzymanie się Windows SDK i staranny dostęp do D3DX?) – axon

Odpowiedz

8

Gdy mamy do czynienia z tym sam, zacząłem tutaj:

Where is the DirectX SDK?

następnie - w około połowy tej strony, czytając o DirectXMath:

DirectXMath

To dość dużo tylko w tym prawe pliki nagłówkowe i zmianę prefiksów "D3DX" na "XM". Nie tak proste, ale taki jest ogólny pomysł.

Twój pierwszy program będzie prawdopodobnie inkluzjami/usings jak to:

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

Oczywiście, to nie jest uważane za najlepsze praktyki, że „używając nazw”, ale w tym jednym przypadku stwierdziliśmy, że „DirectX :: "na każdym wierszu mojego programu prawie uniemożliwiałem mój program (dla mnie), aby czytać - więc poszedłem z" użyciem ".

Powodzenia!

+0

Mówi, że DirectXMath jest dla Windows 8 lub nowszego. Czy jest coś, co można również zastosować w systemie Windows Vsta/7? – bytecode77

+0

Ponadto, nie znalazłem żadnych tutoriali, które nie używają d3dx. Czy możesz wskazać mi osobę, która nie używa tej zdeprawowanej biblioteki? – bytecode77

+0

Użyłem go z Win7 bez żadnych problemów. Jedyny tutorial, jaki mogłem znaleźć, to MS (http://code.msdn.microsoft.com/windowsdesktop/Direct3D-Tutorial-Win32-829979ef) i to było wystarczająco dobre, by mnie skłonić. Jeśli naprawdę nie chcesz używać XM, oczywiście powinieneś mieć możliwość połączenia w D3DX11.lib i DX10, itp. (Jak w twoim OP). Ale odkąd dopiero zaczynasz, równie dobrze możesz używać obecnych bibliotek. –

1

Prawdopodobnie zawarte złą ścieżkę właściwości zamiast "* DirectxSDK/lib/x86", to włączone "" * DirectxSDK/lib”.

+0

to wygląda jak komentarz. –

0

biegałam w tej kwestii, jak również przy użyciu VS2010, ale ja po prostu . znalazł rozwiązanie Musisz dostawcy Łącznikiem z pliku biblioteki, które mają kłopoty z

Project-> Ustawienia-> Konfiguracja Ustawienia->linker -.> Dodatkowe katalogi biblioteczne

następnie dodać plik biblioteki, w którym chcesz pracować dla mnie, mam nadzieję, że działa również dla Ciebie a potem nie musisz zadzierać z DirectXMath i znaleźć dla niego nowe tutoriale.