能否不使用Visual Studio使用DirectXTex?编译报错求助
解决DirectX 11纹理加载的库链接问题
嘿,我之前在Clang/GCC环境下搞DirectX 11纹理加载时,也踩过几乎一模一样的坑!先给你理清楚问题根源,再分享几个不用Visual Studio就能搞定的方案:
为什么会出现这些错误?
- 你一开始用的
WICTextureLoader.h/DDSTextureLoader.h是旧版DirectX SDK的头文件,和现在Windows SDK整合后的DirectXTex组件不兼容,所以会报头文件错误。 - 换成
WICTextureLoader11.h/DDSTextureLoader11.h后,只包含了函数声明的头文件,但没链接实现这些函数的库文件,链接器找不到函数的二进制实现,自然就报“未定义引用”了——这就是你怀疑的Clang/GCC找不到.lib的问题。
无需Visual Studio获取可用库文件的方案
方案1:用CMake+Clang/GCC编译DirectXTex源码
DirectXTex是完全开源的,支持CMake跨平台构建,不用VS也能轻松编译出.lib文件:
- 把DirectXTex源码拉到本地
- 新建一个
build文件夹,进去后执行CMake配置命令:- 要是用MinGW的GCC:
cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release - 要是用Clang:
cmake .. -G "MinGW Makefiles" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release
- 要是用MinGW的GCC:
- 执行编译命令:MinGW环境下用
mingw32-make,其他类Unix环境直接用make - 编译完后,在
build/lib或者build/bin里就能找到DirectXTex.lib(静态库)或者对应的动态库,把这个库链接到你的项目里就行。
方案2:直接把源文件嵌入你的项目
嫌编译库麻烦?更简单的办法是把DirectXTex里和纹理加载相关的源文件直接加到项目里编译:
- 从源码里复制
WICTextureLoader11.cpp、DDSTextureLoader11.cpp、DirectXTex.cpp,还有对应的头文件到你的项目目录 - 代码里包含正确的头文件:
#include "WICTextureLoader11.h"、#include "DDSTextureLoader11.h" - 编译时直接把这些源文件一起编译,完全跳过库链接的步骤,从根源避免找不到.lib的问题。
额外要注意的点
- 别忘了你的项目必须链接DirectX 11的核心库:Clang/GCC下要加链接参数
-ld3d11 -ldxgi -ld3dcompiler - 确保Windows SDK的路径配置正确,编译器能找到
WICTextureLoader11.h这些头文件——可以用CMake的CMAKE_INCLUDE_PATH或者编译器的-I参数指定路径。
内容的提问来源于stack exchange,提问作者Heap Overflew
相关产品推荐
相关产品推荐

