Assimp 模型加载库的安装/链接问题

12

我正试图安装Assimp以在我的项目中使用,但遇到了一些问题。我当前正在使用win 10 pro和visual studio 15 2017。

  1. 我已下载Assimp 4.0.1.zip,将其解压缩到一个目录中,加载了cmakeGui并运行了两次配置,然后生成到Assimp/build目录中。

  2. 接下来,我进入Assimp/build,运行了Assimp.sln并选择了ALL_BUILD,然后将与.lib和.dll一起的所有文件从/code/debug复制到了我的项目的Debug目录中,该目录是exe构建的位置。我将.lib复制到我的opengl/libs目录中,并将/include中的所有头文件从最初提取的下载中复制到我的opengl/includes/assimp目录中。

  3. 最后,我调整了项目的链接器设置以包括assimp.lib和assimp.dll(简化此帖子的别名)

当我尝试构建项目时,它说它无法打开dll,当我尝试实验时,我将dll复制到main.cpp和其他文件旁边的项目目录中并重新运行,这次它说“无效或损坏的文件:无法读取地址0x378”


可以肯定地说,我需要学习编译、链接和cmake,但现在我决定重新开始。

当我将头文件包含到我的项目中时,我认为它已经工作了(也许...)。为此,我重新开始,像以前一样构建Assimp,将所有与dll一起的文件移动到我的libs目录中,将下载的所有includes转储到我的includes中,还将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\getting started\opengl_model_loading\opengl_model_loading\main.obj 1

这个错误让我感觉可能是由于dll文件引起的。请给予建议。

1个回答

8

我最近刚刚自己做了这件事,但是在使用v401时遇到了很多问题,例如错误或链接问题。我成功地通过以下方式使其正常工作;

注意:ASSIMP确实需要boost作为依赖项。

  1. 从github下载/克隆主要资产导入库: https://github.com/assimp/assimp
  2. 打开Cmake GUI,然后:

    • 源代码在哪里:“..\MyDocuments\assimp\assimp-master”
    • 二进制文件生成位置在哪里:“..\MyDocuments\assimp\assimp-master\build”。您需要创建一个构建文件夹并将Cmake指向它。

    2.1. 或者,如果您熟悉命令行选项:使用相关路径生成项目文件

    • cmake -G”Visual Studio 14 Win64"
  3. 单击“配置”。
  4. 然后生成。确保选择正确的构建选项,即VS15 2017 64位。
  5. 使用Visual Studio加载“..\MyDocuments\assimp\assimp-master\build\Assimp.sln”。
  6. 右键单击“ALL_BUILD”,然后选择“生成”。这将需要几分钟的时间。一旦完成且没有错误,它应该在..\MyDocuments\assimp\assimp-master\build\code\Debug中创建必要的*.dll/*.lib文件
  7. 将相关的*.lib和"..\MyDocuments\assimp\assimp-master\include\assimp"文件夹链接并包含到现有项目中。您还需要确保*.dll文件与运行* exe的文件相同文件夹或已包含在其中。
  8. 您还可能需要从..\MyDocuments\assimp\assimp-master\build\include\assimp\config.h"复制并在步骤7中包含它。

请确保您为代码构建正确的库,例如32/64位、调试/发布、Unicode等,否则可能仍会遇到问题。

以下视频对于视觉倾向者很有用。 https://youtu.be/W_Ey_YPUjMk

希望这可以帮助您。

编辑: 如果您想要静态库版本,即不需要 .dll 文件: 从上面的步骤开始:

5.1. 将相关项目配置类型和扩展名从 .dll 更改为 .lib 类型(应该有两个:assimp 和 zlib)。

5.2. 右键单击“UpdateAssimpLibsDebugSymbolsAndDLLs”->属性->构建事件,并在命令行部分中将路径从 ..\Path*.dll 更新为 ..\Path*.lib。(如果遇到错误,请在 assimp_cmd 项目上执行相同操作)。

  1. 与上述步骤相同,但现在还需要将您的项目链接到 IrrXML.lib 和 zlibd.lib。应不再需要 *.dll 文件。

很高兴你也搞定了,我之前就已经搞定了,只是忘记来更新这个问题。我重新安装了所有东西,并确保平台适当,基本上按照我的问题中的相同步骤操作,并确保正确链接和将.dll放在我的项目生成的.exe旁边。 - eternalNoob
是的,有时重新开始会有所帮助。现在已经成功使用静态库版本,即不需要.dll文件。我会在帖子中更新详细信息。 - ReturnVoid
4
感谢这份逐步指南!对于静态库,我还需要在 CMake 中启用 ASSIMP_BUILD_ZLIB 并禁用 BUILD_SHARED_LIBS。IrrXML.lib 和 zlibstaticd.lib (而不是 zlibd.lib)文件分别位于 ...\build\contrib\irrXML\Debug...\build\contrib\zlib\Debug - JD80121
我的项目中的配置名称(例如x86或x64)必须与Assimp中显示的名称相同。仅具有相同的内部设置(32位或64位)是不够的。违反这个规则可能会导致LNK2019错误。 - cppBeginner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接