最近在 LearnOpenGL CN 上学习时遇到了一个究极大困难。
LearnOpenGL CN Assimphttps://learnopengl-cn.github.io/03%20Model%20Loading/01%20Assimp/
在学习 OpenGL 的过程中我一直使用的是 VSCODE,但用 VSCODE 配置 Assimp 时遇到了巨大的困难,并且在网上查阅的资料几乎全部都是用 VS 配置的环境。历经好几天的尝试与崩溃,终于配好了环境,也遇到了很多不了解的知识点,所以写成文章记录一下。
泪目
如果你还没有配置 OpenGL + VSCODE 的环境,可以参考以下文章:
vscode OpenGL 环境搭建_sarono的博客-CSDN博客_vscode配置openglvscode OpenGL环境搭建vscode OpenGL环境搭建一.准备阶段二.开始配置1.构建GLFW2.配置GLAD3.第一个项目三.总结一.准备阶段环境:win10 mingwLearnOpenGL CN的教程地址vscode c++环境。若没有配置好,可以查看这里,vscode c++环境配置。点击这里下载CMake,选择msi版本。二....https://blog.csdn.net/sarono/article/details/86564726创建窗口 - LearnOpenGL CNhttps://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/
Assimp 基本上没有预编译的文件,而且为了适配本机环境,最好还是自己编译,因此我们需要下载 Assimp 的源码:
Github Assimp v3.3.1 源码下载https://github.com/assimp/assimp/releases/tag/v3.3.1/
在 Github 上下载源码即可(官网的下载链接最后同样会导向 Github)。
我们选择 Source code (tar.gz) 这一项即可。
下载之后解压到你喜欢的地方,最好是英文路径的(这是由于很多软件不支持中文路径,使用英文路径是个好习惯)。
然后新建一个空的 build 文件夹,在哪新建都可以。我这里新建在了解压后的文件夹里面。
这一步里面的坑不少,首先我们需要安装 CMake。用 Installer 傻瓜式安装即可。版本不重要,我安装的是当前最新的版本。
安装好之后打开 CMake,我们需要配置两个路径。
按下 Browse Srouce 选择源代码所在文件夹,在我这里就是 C:\Assimp\temp\assimp-3.3.1
按下 Browse Build 选择我们刚刚创建的 build 文件夹
然后点左下角的 Configure,选择 MinGW Makefiles。
在相当多的教程里面,这一步选择的是 Visual Studio 14/15/16 2015/2017/2019,这是由于他们接下来会使用 Visual Studio 编译工程,而一般来说 VSCODE 里面的 C/C++ 工程用的不是MSVC,我采用的是 MinGW,因此我们需要在这一步选择 MinGW Makefiles。
如果你使用 Visual Studio(MSVC) 编译工程,最后得到的静态库文件是 .lib 结尾的,而 MinGW 编译出静态库文件是 .a 结尾的,这会导致不兼容,因此我们还是乖乖用 MinGW 编译就好。(在 Assimp 官网下载的预编译版本也是 .lib 文件,所以还是自己编译的好)
然后点击 Finish 按钮,CMake 会开始配置,如果出现以下警告信息不用担心,其中相当一部分是年代原因导致的,继续往下走就行。
以下是我截取出来的一部分警告信息:
在黑字部分,如果出现以下信息也不用担心:
如果你有关 DirectX 的部分长这样,那么你可以跳过下面的修复步骤(路径是你安装 DirectX 的路径):
但如果出现以下信息,则需要修复:
Looking for DirectX...
DirectX_PREFIX_PATH changed.
Could not locate DirectX
这是由于找不到 DirectX 而报错了,我们需要下载 DirectX:
DirectX 一键式安装包https://www.microsoft.com/en-us/download/details.aspx?id=6812 如果在安装 DirectX 的过程中遇到了错误码为 s1023 的错误,则需要先卸载掉你电脑上的 Visual C++ 2010 Redistributable Package,我们可以在应用中找到它们。x86 和 x64 版本都要卸载掉。
然后重新安装 DirectX,然后再把刚刚卸载掉的 Visual C++ 2010 Redistributable Package 装回来:
Visual C++ 2010 Service Packhttps://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=26999
如果一切顺利,我们就回到 CMake,点击左上角的 File -> Delete Cache,重新选择源文件,build 文件位置,再次 Configure 之后有关 DirectX 的 Configure 信息应该长这样:
如果你的 DirectX 信息无误或者已经修复完成,我们就再点击一次 Configure,这时上面的宏定义会变白,点不点都可以,只要 Configure 过一次就可以,但白色总比像报错一样的红色好看。
然后点击 Configure 旁边的 Generate。
此时 CMake 就完成了它的任务。
我们打开之前自己新建的 build 文件夹,会发现现在里面多了很多文件:
下一步就是打开命令行(win+R+"cmd"),进入到 build 文件夹里。
然后用 mingw32-make 命令编译工程。
如果你愿意,你可以加上参数 -jn ,其中 n 是你的 CPU 的线程数。以我的 CPU Ryzen 5800H 为例,它有 8 个核心 16 个线程,因此我可以输入 -j16。
这个参数是为了多线程编译,加快编译的速度。当然,不加这个参数也是可以的。
然后我们的 CPU 就会开始愉快地编译。
这个过程中可能会出现巨量的警告与报错信息,但一般不用太担心。我们再次打开 build 文件夹,它已经进化到了它的终极形态。
我们首先复制 assimp-3.3.1\include\assimp 文件夹到你自己的工程里面,一定要是你自己工程里能检索到头文件的地方,assimp 文件夹里面包含了我们 include 时所需的所有头文件。。
然后在 code 文件夹里面找到 libassimp.dll 和 libassimp.dll.a 文件。他们分别是我们需要的动态库和静态库之一。
在 contrib\zlib 文件夹里找到 libzlibstatic.a 文件,它是我们需要的另一个静态库。
我们将这一个动态库和两个静态库文件复制到你自己的工程(注意,是你的 OpenGL 工程,不是 Assimp 工程)里面。
动态库 libassimp.dll 放在与 exe 文件同级的地方就可以,不用管它。静态库一般放在 lib 文件夹里面,当然如果你愿意放在哪都可以。
最后我们打开 task.json 文件,在 args 参数里加上我们要链接的静态库。如果你此前没有 lib 文件夹,那么你还需要用 "-L" 指明静态库所在的文件夹。需要说明的是:
举个例子:
"-L${workspaceFolder}/lib" // 指明了静态库所在文件夹
"-I${workspaceFolder}/include" // 指明了代码的 include path
"-lzlibstatic" // 指明了链接的静态库的名字
静态库的名字不需要 lib 前缀,也就是说,如果静态库叫 libzlibstatic 的话,我们把它写成参数时只需要写 -lzlibstatic 即可。
我们链接上新添加的两个静态库文件即可。
最后一个坑,由于我们的其中一个静态库的名字叫 libassimp.dll.a,我们不能直接用:
"-lassimp.dll"
来指明链接的静态库名字,而要用:
"-l'assimp.dll'"
然后我们就完成了所有的配置!!!
你现在可以参照 LearnOpenGL 上的代码跑一下模型了!
main.cpphttps://learnopengl.com/code_viewer_gh.php?code=src/3.model_loading/1.model_loading/model_loading.cppmodel.hpphttps://learnopengl.com/code_viewer_gh.php?code=includes/learnopengl/model.hmesh.hpphttps://learnopengl.com/code_viewer_gh.php?code=includes/learnopengl/mesh.hVertex Shaderhttps://learnopengl.com/code_viewer_gh.php?code=src/3.model_loading/1.model_loading/1.model_loading.vsFragment Shaderhttps://learnopengl.com/code_viewer_gh.php?code=src/3.model_loading/1.model_loading/1.model_loading.fs
OpenGL开发-学习笔记-Assimp库的配置_莫忘输赢的博客-CSDN博客_assimp库Assimp的安装编译及使用过程全纪录(VS2015)(适合菜鸟看的超详细记录)2019.02.21 17:49:01字数 2030阅读 3380本来今年过年之前,我就在看opengl教程,然后就卡在了装assimp上面,心存侥幸的跳过了先看后面结果发现还是绕不过这个。模型加载库assimp的配置,果然是不得不克服的一个点,我从昨天下午开始搞,碰了很多次璧,今天上午终于配好了。凸(艹皿...https://blog.csdn.net/wjl18270365476/article/details/102515966
[Qt OpenGL] mingw编译Assimp模型导入库_洋葱的博客-CSDN博客[Qt OpenGL] mingw编译Assimp模型库问题解决方案问题最近在捣鼓用Qt框架下的OpenGL,所以想要在Qt中使用Assimp库。Assimp库作为著名的模型开源库,支持大量的格式的3D模型,还有骨骼动画等格式。一开始我直接使用在vs2015用过的assimp的lib,然后出现了链接未定义,Qt编译结果如下: 这看起来就是非常普通的未链接相应的库的错误提示,...https://blog.csdn.net/qq_31615919/article/details/80480497 .a文件和.lib文件的区别_boshuzhang的专栏-CSDN博客.a文件和.lib文件的区别 2013-08-01 10:42:37| 分类: 编程知识|举报|字号 订阅 下载LOFTER我的照片书 |(转载)最近开始学习使用dev-c++,在学习opengl的时候发现dev-c++使用的链https://blog.csdn.net/boshuzhang/article/details/74529115
build - VSCode c++ task.json include path and libraries - Stack Overflowhttps://stackoverflow.com/questions/52910102/vscode-c-task-json-include-path-and-libraries
c++ - Assimp linker error - undefined references - Stack Overflowhttps://stackoverflow.com/questions/15957708/assimp-linker-error-undefined-references