2015-11-15 5 views
0

Компонент продолжает показывать кучу ошибок о функциях, которые я не использовал в своем приложении. Единственное, что я сделал, это изменить заголовки из DirectX SDK на Windows SDK, и я также загрузил пакет для DirectXTK, поэтому я могу использовать WICTextureLoader.h и DDSTextureLoader.hLinker дает ошибки в отношении функции, которую я вообще не использовал в своем приложении.

Вот некоторые из ошибок компоновщика.

error LNK2001: unresolved external symbol "union __m128 __vectorcall DirectX::XMVectorMultiply(union __m128,union __m128)

error LNK2001: unresolved external symbol "void __vectorcall DirectX::XMVectorSinCos(union __m128 *,union __m128 *,union __m128)

error LNK2001: unresolved external symbol "union __m128 __vectorcall DirectX::XMVectorSet(float,float,float,float)

Я не уверен, что здесь происходит. Я не звонил XMVectorMultiply() или XMVectorSinCos() вообще в моем приложении. Я уже связал соответствующие библиотеки и заголовки в моем проекте, но это еще не решит проблему. Что может вызвать эти ошибки компоновщика?

(Если вам нужно более уместную информацию, просто спросите)

Ниже только часть моего кода (я не включил все это потому, что у меня есть около 2000 строк кода):

#pragma comment (lib, "dinput8.lib") 
#pragma comment (lib, "dxguid.lib") 
#pragma comment (lib, "D3D11.lib") 
#pragma comment (lib, "d3dcompiler.lib") 

#include <windows.h>  
#include <D3D11.h>      
#include <dinput.h> 
#include <D3Dcompiler.h> 
#include <sstream> 
#include <SimpleMath.h> 
#include <DirectXMath.h> 
#include <DDSTextureLoader.h> 
#include <WICTextureLoader.h> 
#include <SpriteBatch.h> 
#include <SpriteFont.h> 

void Create_Camera_View_Space() 
{ 

camPosition = DirectX::XMVectorSet(0.0f, 2.0f, -12.5f, 0.0f); 
camDirection = DirectX::XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f); 
camUp = DirectX::XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f); 



CameraView = DirectX::XMMatrixLookAtLH(
         camPosition,  
         camDirection, 
         camUp   
         ); 
} 


void Create_Camera_Projection_Space() 
{ 
CameraProjection = DirectX::XMMatrixPerspectiveFovLH(
            0.4f * 3.14f,  
            (float)400/400, 
            1.0f,    
            10000.0f    
            );   

} 


void Create_World_Space_for_Ground() 
{ 
DirectX::XMMATRIX Translation; 
DirectX::XMMATRIX Rotation;  
DirectX::XMMATRIX Scale; 
DirectX::XMMATRIX Input_Rotation_X; 
DirectX::XMMATRIX Input_Rotation_Z; 


GroundWorld = DirectX::XMMatrixIdentity(); 


Scale = DirectX::XMMatrixScaling(500.0f, 10.0f, 500.0f); 


Translation = DirectX::XMMatrixTranslation(0.0f, 10.0f, 0.0f); 

GroundWorld = Scale * Translation; 


} 

Это в несколько раз я использую функции в DirectXMath.h, но компоновщик показывает ошибки, которые поступают из этого конкретного заголовка ..

+0

У вас есть код? – Berendschot

+0

Я только что отредактировал свое оригинальное сообщение и добавил код. Но я не думаю, что это сильно поможет, поскольку ошибки компоновщика связаны с функциями, которые я не использую в своем приложении. –

+0

Я нашел проблему, кажется, что каждый раз я вызываю функцию 'DirectX :: XMVectorSet()', ' DirectX :: XMMatrixLookAtLH() ',' DirectX :: XMVectorGetX() ',' XMMatrixRotationRollPitchYaw() 'и' XMVector3TransformCoord() '.Каждый раз, когда я вызываю эти функции, я получаю ошибку «неразрешенный внешний символ». Как я могу это исправить? –

ответ

1

скорее всего проблема в том, что вы строите различные библиотеки в вопросе с различным настройки, compi листы или пути.

__vectorcall - соглашение о вызове, поддерживаемое VS 2013 или более поздней версией, и используется DirectXMath в SDK Windows 8.1 и SDK Windows 10, если оно поддерживается вашим компилятором. Поскольку DirectXMath является встроенным, вы должны быть уверены в том, что все, что вы используете DirectXMath в том же EXE или DLL, использует ту же версию заголовков и ту же версию компилятора.

Это одна из причин, почему DirectX Tool Kit предоставляет файлы, специфичные для компилятора vcxproj, чтобы обеспечить его синхронизацию.

Как ваш проект ранее использовал устаревший SDK DirectX, у вас, вероятно, есть некоторые затяжные макросы препроцессора и настройки VC++-каталогов, которые необходимо очистить. Вы можете попробовать выполнить diff вашего vcxproj файла с помощью DirectXTK_Desktop_2015.vcxproj.

Вы также можете иметь проблемы, если вы строите x86 конфигурацию с /arch:IA32 или /arch:SSE, а не /arch:SSE2, который является тем, что используется для библиотеки DirectX Tool Kit сборок.

Подобное несоответствие может произойти, если вы попытаетесь использовать _XM_NO_INTRINISCS_ в своем проекте, который не соответствует тому, как построен DirectX Tool Kit.

+0

Я думаю, что я использую компилятор Microsoft C/C++, который пришел с Visual Studio 2015. Это немного странно, потому что, как только я создал новый проект с теми же .cpp и .hlsl .... примерно половину 'неразрешенных внешних ошибки были решены, и теперь осталось только 4 ошибки компоновщика. Почему, по вашему мнению, большинство ошибок компоновщика были решены, когда я создал новый проект в Visual Studio 2015? (btw я должен изменить компилятор, который я использую?) –

+0

Повторное создание проекта, вероятно, разрешило проблемы с конфигурацией. Как вы добавили DirectXTK в свой проект? NuGet или с помощью '' vcxproj''? Какой '' vcxproj' вы использовали? Какие ошибки ссылок остались? –

+0

Я добавил DirectXTK с помощью NuGet. Другими словами, Project-> Manage NugetPackages, а затем я искал DirectX Tool kit 2015. Вот 2 ошибки компоновщика, которые остались ::::: 'ошибка LNK2019: неразрешенный внешний символ« void __vectorcall DirectX :: XMVectorSinCos », на который ссылается функция __vectorcall DirectX :: XMQuaternionRotationRollPitchYawFromVector' и 'ошибка LNK2019: неразрешенный внешний символ" bool __vectorcall DirectX :: XMVector3IsInfinite (объединение __m128), на который ссылается функция «struct DirectX :: XMMATRIX __vectorcall DirectX :: XMMatrixLookToLH» ​​эти ошибки появляются каждый раз, когда я вызываю функции –

Смежные вопросы