[Qt OpenGL] mingw编译Assimp模型导入库

[Qt OpenGL] mingw编译Assimp模型库

  • 问题
  • 解决方案

问题

最近在捣鼓用Qt框架下的OpenGL,所以想要在Qt中使用Assimp库。Assimp库作为著名的模型开源库,支持大量的格式的3D模型,还有骨骼动画等格式。一开始我直接使用在vs2015用过的assimp的lib,然后出现了链接未定义,Qt编译结果如下:
[Qt OpenGL] mingw编译Assimp模型导入库_第1张图片
这看起来就是非常普通的未链接相应的库的错误提示,但是我已经在.pro文件加入响应的库连接,而且我也知道对应相应的32位(我mingw为32位的)。但无论如何,都是未定义错误,接着我仔细观察发现,所有错误都是位置Assimp::Importer的,但是在程序中我不仅用了Assimp的Importer,而且也用了Assimp的scene,只有Importer报了未定义
[Qt OpenGL] mingw编译Assimp模型导入库_第2张图片
这说明很有可能是lib自身的问题,mingw与该lib不兼容,所有有格式解析的错误!我要用的lib应该要mingw编译的才行,然后我在网上找到了一个用mingw编译assimp的博文,虽然该文章有点远了,但是还有点参考价值,链接如下:
https://blog.csdn.net/gamesdev/article/details/26969559

解决方案

最后还是用cmake和mingw自己编译了一个Assimp的lib,问题才得已解决。

工具准备

首先安装cmake,前往官网https://cmake.org/ 下载一个适合自己系统的版本。
然后去Assimp官网下载Assimp源码,我下载的是assimp-3.3.1,链接在这里:https://github.com/assimp/assimp/releases/tag/v3.3.1/。
至于mingw编译器,安装了Qt Creator的mingw版本都带有,在Qt目录下的tools文件夹中。

编译

1、一切操作我都是在cmd命令行下,我们要用到cmake.exe和mingw32-make程序,这两个程序分别在cmake安装目录和Qt安装目录中,在我这里是
C:\Users\Yang\Desktop\cmake-3.11.2-win32-x86\bin\cmake.exe
E:\Qt5.10.0\Tools\mingw530_32\bin\mingw32-make.exe
我们在cmd中设置环境变量,以便能在cmd直接运行cmake和ming32-make,如下

set path=%path%;C:/Users/Yang/Desktop/cmake-3.11.2-win32-x86/bin;E:/Qt5.10.0/Tools/mingw530_32/bin

大体就是 set path=%path%;cmake的bin目录;mingw的bin目录,要根据自己的安装目录修改。

2、现在我们进入下载好的Assimp源码解压后的目录,如下

cd Assimp源码目录

用cmake构建,如下

cmake -G "MinGW Makefiles" -DENABLE_BOOST_WORKAROUND=ON -DBUILD_STATIC_LIB=ON -DCMAKE_RC_COMPILER=E:/Qt5.10.0/Tools/mingw530_32/bin/windres.exe -DCMAKE_MAKE_PROGRAM=E:/Qt5.10.0/Tools/mingw530_32/bin/mingw32-make.exe -DCMAKE_LFLAGS=-static -DCMAKE_LFLAGS_DLL=-static -DDX9_INCLUDE_PATH=E:/Qt5.10.0/Tools/mingw530_32/i686-w64-mingw32/include -DD3D9_LIBRARY=E:/Qt5.10.0/Tools/mingw530_32/i686-w64-mingw32/lib/libd3d9.a -DD3DX9_LIBRARY=E:/Qt5.10.0/Tools/mingw530_32/i686-w64-mingw32/lib/libd3dx9.a .

请注意,上面指令中文件目录参数修改成自己系统安装的文件目录参数。
[Qt OpenGL] mingw编译Assimp模型导入库_第3张图片

3、然后就是用mingw编译,如下:

ming32-make -j 4

[Qt OpenGL] mingw编译Assimp模型导入库_第4张图片

构建到后期可能会出现error,一些error是无关紧要的,因为后期实际上实在编译test部分,如assimp_vier.exe。构建率要90%以上吧。构建完成后,在assimp源码目录下,有lib和bin两个文件夹
这里写图片描述
[Qt OpenGL] mingw编译Assimp模型导入库_第5张图片
把lib链接到响应的项目中即可,dll放到exe目录下,不然会报错。

你可能感兴趣的:(软件开发,OpenGL)