Assimp 模型加载库安装/链接问题
Posted
技术标签:
【中文标题】Assimp 模型加载库安装/链接问题【英文标题】:Assimp model loading library install/linking troubles 【发布时间】:2018-02-06 06:23:58 【问题描述】:我正在尝试安装 Assimp 以在我的项目中使用,但遇到了一些问题。我目前正在使用 win 10 pro 和 visual studio 15 2017。
我已经下载了 Assimp 4.0.1.zip,解压到一个目录,加载 cmakeGui 并运行两次配置,然后生成到 Assimp/build 目录。
接下来我进入 Assimp/build 并运行 Assimp.sln 并选择了我认为是的 ALL_BUILD。然后,我复制了 /code/debug 中与 .lib 和 .dll 并排的所有文件,并将它们全部移动到我的 exe 构建到的项目的 Debug 目录中。我将 .lib 复制到我的 opengl/libs 目录中,并将 /include 中的所有头文件从最初提取的下载中复制到我的 opengl/includes/assimp 目录中。
最后,我调整了我的项目链接器设置以包含 assimp.lib 和 assimp.dll(为简化本文而使用别名)
当我尝试构建项目时,它说它无法打开 dll,并且在试验时我将 dll 与 main.cpp 和我的其他文件一起复制到项目目录中并再次运行,这一次它说“文件无效或损坏: 无法读取 0x378"
可以肯定地说我需要学习编译、链接和 cmake,但现在我要重新开始。
当我将标题包含到我的项目中时,我认为我让它停止抱怨之后我让它工作了(也许我做到了......)。为此,我像以前一样从新构建的 Assimp 开始,将所有带有 dll 的文件移动到我的 libs 目录中,将下载中的所有包含转储到我的包含中,还将 config.h 从构建移动到此目录。然后我在项目中设置了链接器设置,并没有将任何东西移动到我的项目目录中。
在那之后,它停止了抱怨,所以我继续我正在关注的教程系列。我编译了,遇到了很多错误,将它们修复为 0,然后突然我得到了 8 个新错误。
严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号 _aiGetMaterialTextureCount 在函数“public: unsigned int __thiscall aiMaterial::GetTextureCount(enum aiTextureType)const” (?GetTextureCount@aiMaterial@@QBEIW4aiTextureType@@@Z) opengl_model_loading F:\Desktop\MyDocuments\Tuts\opengl\开始\opengl_model_loading\opengl_model_loading\main.obj 1
这个错误给我的感觉可能是由于 dll。 请指教。
【问题讨论】:
【参考方案1】:我自己最近刚刚完成了这项工作,我会说 v401 遇到了很多问题,并且出现错误或链接问题。成功让我与以下人员合作;
注意:ASSIMP 确实有 boost 作为依赖项。
-
从 github 下载/克隆主 Asset-Importer-Lib:
https://github.com/assimp/assimp
打开 Cmake GUI 并打开一次:
源代码在哪里:“..\MyDocuments\assimp\assimp-master” 构建二进制文件的位置:“..\MyDocuments\assimp\assimp-master\build”。您需要创建一个构建文件夹并将 Cmake 指向它。2.1。或者,如果您熟悉命令行选项:使用
生成具有相关路径的项目文件 cmake -G”Visual Studio 14 Win64” 点击配置。 然后生成。确保选择正确的构建选项,即 VS15 2017 64bit。 使用 Visual Studio 加载“..\MyDocuments\assimp\assimp-master\build\Assimp.sln”。 右键单击“ALL_BUILD”并选择“构建”。这将需要几分钟。一旦完成并且没有错误,它应该在其中创建必要的 *.dll/*.lib ..\MyDocuments\assimp\assimp-master\build\code\Debug 在现有项目中链接并包含相关的 *.lib 以及 “..\MyDocuments\assimp\assimp-master\include\assimp”文件夹。您还需要确保 *.dll 文件与您正在运行的 *exe 位于同一文件夹中或包含在其中。 您可能还需要从 ..\MyDocuments\assimp\assimp-master\build\include\assimp\config.h" 复制并包含在第 7 步中。只需确保为代码构建正确的库,即 32/64bit/debug/release/unicode/etc,否则可能仍然会遇到问题。
以下视频对于有视觉倾向的人很有用。 https://youtu.be/W_Ey_YPUjMk
希望这会有所帮助。
编辑: 如果您想要静态库版本,即不需要 .dll: 从以上步骤:
5.1。将相关项目配置类型和扩展名从 .dll 更改为 .lib 类型(应该是两个:assimp 和 zlib)。
5.2。右键单击“UpdateAssimpLibsDebugSymbolsAndDLLs”->Properties->Build Events & 将命令行部分中的路径从 ..\Path*.dll 更新为 ..\Path*.lib。 (如果遇到错误,请在 assimp_cmd 项目上执行相同操作)。
-
与上述相同,但现在还需要将您的项目链接到 IrrXML.lib 和 zlibd.lib。不再需要 *.dll 文件。
【讨论】:
很高兴你也让它工作了,我不久前设法让它工作了,忘了来更新这个。我重新安装了所有内容并确保平台合适,遵循与我的问题中基本相同的步骤,并确保正确链接所有内容并将 .dll 放在我项目中的 .exe 构建旁边。 是的,有时重新开始会有所帮助。现在也刚刚获得静态库版本,即不需要.dll。将更新帖子的详细信息。 感谢您的分步指南!对于静态库,我还必须在 CMake 中启用ASSIMP_BUILD_ZLIB
并禁用 BUILD_SHARED_LIBS
。 IrrXML.lib 和 zlibstaticd.lib(而不是 zlibd.lib)文件分别位于 ...\build\contrib\irrXML\Debug
和 ...\build\contrib\zlib\Debug
。
我的项目中的配置名称(例如 x86 或 x64)也必须与 Assimp 中出现的相同。仅仅相同的内部设置(32 位或 64 位)是不够的。违反此规定可能导致 LNK2019。以上是关于Assimp 模型加载库安装/链接问题的主要内容,如果未能解决你的问题,请参考以下文章
我的OpenGL学习进阶之旅Assimp库支持哪些3D模型格式?