d3dx11.lib не найден?

Я использую Windows 8/Visual Studio 2012, C++11 и Direct3D 11 для разработки.

Я включаю библиотеки 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 в сам каталог проекта, он не работает.

Я установил Windows 8 SDK, а также DirectX SDK от июня 2010 года. Я что-то упустил?


person bytecode77    schedule 29.03.2013    source источник
comment
Вы уверены, что файл lib D3DX11 включен в те, которые вы копируете? Я полагаю, вы можете связать его, но служебная библиотека D3DX больше не поддерживается - на самом деле вам вообще не нужно загружать SDK 2010 года. D3DX был заменен библиотекой DirectXMath (XMMath). Преобразование немного болезненно, но не так уж плохо.   -  person Mark Stevens    schedule 29.03.2013
comment
В порядке. Не знал этого. Я новичок в D3D11. Я посмотрю, как это сделать без этой библиотеки.   -  person bytecode77    schedule 30.03.2013
comment
Иногда лучше использовать D3DX (я не использую DirectXMath, потому что это усложняет взаимодействие с CUDA). Кроме того, некоторые интерфейсы для DirectXMath плохо переносятся (например, инициализация). Вы нашли исправление? (Способ придерживаться Windows SDK и аккуратно получить доступ к D3DX?)   -  person axon    schedule 09.12.2014
comment
Вам нужно связать D3DX, если вы хотите, чтобы Windows 7 работала.   -  person Epirocks    schedule 30.11.2016


Ответы (3)


Когда я занимался этим сам, я начал здесь:

Где находится DirectX SDK?

затем - примерно в середине этой страницы, чтение о DirectXMath:

DirectXMath

Это в значительной степени просто включение правильных файлов заголовков и изменение префиксов «D3DX» на «XM». Не совсем так просто, но это общая идея.

Ваша первая программа, вероятно, будет иметь такие включения/использования:

#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::» в каждой строке моей программы делало мою программу почти невозможной (для меня) для чтения — поэтому я пошел с «использованием».

Удачи!

person Mark Stevens    schedule 30.03.2013
comment
В нем говорится, что DirectXMath предназначен для Windows 8 или более поздней версии. Есть ли что-то, что можно использовать и для Windows Vsta/7? - person bytecode77; 30.03.2013
comment
Кроме того, я не нашел никаких руководств, в которых не используется d3dx. Можете ли вы указать мне тот, который не использует эту устаревшую библиотеку? - person bytecode77; 30.03.2013
comment
Я использовал его с Win7 без проблем. Единственный учебник, который я смог найти, был MS (code.msdn.microsoft.com). /windowsdesktop/), и этого было достаточно, чтобы я начал работать. Если вы действительно не хотите использовать XM, конечно, вы должны иметь возможность ссылаться на поддержку D3DX11.lib и DX10 и т. д. (как в вашем OP). Но так как вы только начинаете, можете также использовать текущие библиотеки. - person Mark Stevens; 30.03.2013
comment
Это действительно выглядит как хорошее место для начала. Спасибо! - person bytecode77; 30.03.2013
comment
Таким образом, DirectXMath заменяет необходимость использования d3dx10 и 11? - person ; 03.04.2013
comment
да. Он «оптимизирован» для доступного аппаратного обеспечения, поэтому теоретически он «лучше». Для меня перенос приложения D3DX на DirectXMath был просто изменением имен. Например, D3DXMatrixLookAt становится XMMatrixLookAt, D3DXMATRIX становится XMMATRIX и т. д. НО есть некоторые заметные различия. Во-первых, XMVECTOR не перегружает оператор присваивания, поэтому вместо XMVECTOR vec = XMVECTOR(1,2,3) вам нужно вызвать метод set: XMVECTOR vec = XMVectorSet(1,2,3); - person Mark Stevens; 03.04.2013
comment
Плохой практикой считалось только помещать используемое пространство имен в заголовочный файл. - person Henry Bennett; 31.12.2014

Вероятно, вы указали неверный путь в свойствах. Вместо «*DirectxSDK/Lib/x86» вы указали «*DirectxSDK/Lib».

person KubenQPL    schedule 20.03.2016
comment
похоже на комментарий. - person Prafulla Kumar Sahu; 20.03.2016

Я тоже столкнулся с этой проблемой, используя VS2010, но я только что нашел решение. Вам необходимо предоставить компоновщику файл библиотеки, с которым у вас возникли проблемы.

Проект->Свойства->Свойства конфигурации->Компоновщик->Дополнительные каталоги библиотек

Затем добавьте туда нужный файл библиотеки. Сработало для меня, надеюсь, сработает и для вас, и тогда вам не придется возиться с DirectXMath и искать для него новые учебники.

person Connor    schedule 03.05.2017