C++ 有没有一种方法可以同时包含WictTextureLoader和DDSTextureLoader而不使用';重新定义';错误?

C++ 有没有一种方法可以同时包含WictTextureLoader和DDSTextureLoader而不使用';重新定义';错误?,c++,directx,directx-11,C++,Directx,Directx 11,我正在尝试加载DDS纹理。为此,我使用的是DirectXTex提供的ddssTextureLoader11。我已经在使用同一个库中的另一个纹理加载程序-WICTextureLoader11 问题是,WICTextureLoader11不会出现错误,但是如果只包含ddstructureloader11,或者同时使用这两个工具,就会出现错误 这是我在同时包含或仅包含DDSTextureLoader11时遇到的一些错误: /WICTextureLoader11.cpp:51:17:错误:重新定义“Se

我正在尝试加载DDS纹理。为此,我使用的是
DirectXTex
提供的
ddssTextureLoader11
。我已经在使用同一个库中的另一个纹理加载程序-
WICTextureLoader11

问题是,
WICTextureLoader11
不会出现错误,但是如果只包含
ddstructureloader11
,或者同时使用这两个工具,就会出现错误

这是我在同时包含或仅包含
DDSTextureLoader11
时遇到的一些错误:

/WICTextureLoader11.cpp:51:17:错误:重新定义“SetDebugObjectName”

/WICTextureLoader11.cpp:273:17:错误:重新定义“MakeSRGB”

/WICTextureLoader11.cpp:747:17:错误:调用“SetDebugObjectName”时没有匹配的函数。

/ddstructureloader.h:156:35:错误:重新定义默认参数

我最初认为这是因为
WICTextureLoader
ddstructureloader
都包含相同的函数,所以当包含这两个函数时,它们“重叠”(即编译器检测到重新定义)

我使用一个批处理文件来编译我的项目,在这里我链接到
DirectXTex
DirectXTK
。我还试图包含
DDSTextureLoader
,但没有成功:我已经阅读了DirectXTK的
DDSTextureLoader
的GitHub页面,其中包含了
,它会给我一个链接错误,我想这与函数
CreateDDSTextureFromFile
的错误调用有关,所以现在我正试图找到一种方法来正确调用函数

编辑:不,似乎我正在进行正确的函数调用。错误的是,我试图包括
ddstureloader.h
,但它也需要
ddstureloader.cpp
。但是,当我包含
ddssetureloader.cpp
时会出现错误,例如:

'DDSTextureLoader.cpp':对“BitsPerPixel”的调用不明确->'DirectXTex.h'
'DDSTextureLoader'错误:重新定义了“SetDebugTextureInfo”,之前在“WictTextureLoader”中的定义。

我想,我需要的是包含
.cpp
文件,但要以某种方式消除错误

Edit2:到目前为止,我试图摆脱DirectXTex(我甚至不记得为什么需要它),我已经包括了
WICTextureLoader.cpp
ddstructureLoader.cpp
。我下载并构建了DirectXTK库,然后包括
#pragma注释(lib,“DirectXTK.lib”)
。现在,奇怪的是:当我用
Clang++
编译时,它不会抛出任何错误(但程序在第二个长灰色屏幕后崩溃),然而当我用
cl
编译时(通过
vcvars64
),我得到了
致命错误LNK1104:无法打开文件'directxtk.lib'

Edit3:等等,我甚至不知道为什么我需要
directxtk.lib
。所以我删除了它,并编译了它,但没有任何效果。我认为在尝试包含头(
xxxtureLoader.h
)而不是源(
xxxtureLoader.cpp
)时,我需要该静态库来解决外部符号错误

Edit4:等等,等等,等等。我想,我快疯了。现在,如果我只包括
WICTextureLoader.cpp
(并删除
ddstureloader.cpp
),它会给我以下错误:
(directxtk.lib)检测到“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与值“MT_StaticRelease”不匹配
。我不知道我为什么这么做,但我现在疯了,我盲目地用暴力解决这个该死的问题。为什么我不能把这两个头都扔到我的目录中,然后简单地包含它们呢?有没有办法做到这一点?我该怎么办?为什么GitHub上的DirectXTK/Tex页面不提供如何使用这些东西的分步指南?这些例子让我发疯

请帮我解决这个看似简单的问题

Edit5:我尝试的最后一件事是包括
ddstructureLoader.h
WICTextureLoader.h
,并使用
directxtk.lib
,但它给了我以下错误:

directxtk.lib(DDSTextureLoader.obj):错误LNK2038:检测到“RuntimeLibrary”不匹配:值“MD\u DynamicRelease”与main-3dacd8.o中的值“MT\u StaticRelease”不匹配

directxtk.lib(pch.obj):错误LNK2038:检测到“RuntimeLibrary”不匹配:值“MD_dynamicCrease”与main-3dacd8.o中的值“MT_StaticRelease”不匹配

链接:警告LNK4098:defaultlib'MSVCRT'与其他lib的使用冲突;使用/NODEFAULTLIB:library


我不使用VS,因此我不知道如何使用
/NODEFAULTLIB

使用WIC加载DDS和其他图像文件有三种选择:

  • 使用DirectXTex(库)

  • 使用DDSTureLoader/WictTextureLoader(独立版本)

  • 或者使用DirectX工具包(库)

没有理由在同一个程序中使用它们中的一个以上,如果您尝试,就会发生冲突。看

除非您正在编写纹理处理工具,或者需要支持过多的传统DDS像素格式,否则使用DirectX工具包通常是最简单的。for DirectX工具包很好地涵盖了这一点

你所得到的错误表明使用VisualC++的一些更基本的东西。DirectXTex、DirectXTK库使用推荐的C/C++运行时的“多线程DLL”版本(即

/MDd
/MD
)构建

该错误表示您的程序正在使用“静态链接”版本的C/C++运行时生成

除了“非VS”之外,您没有提到您正在使用的编译器工具集

请参阅,以获取一系列“基本”信息