【问题标题】:Assimp model loading library install/linking troublesAssimp 模型加载库安装/链接问题
【发布时间】:2018-02-06 06:23:58
【问题描述】:

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

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

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

  3. 最后,我调整了我的项目链接器设置以包含 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。 请指教。

【问题讨论】:

    标签: c++ opengl dll assimp cmake-gui


    【解决方案1】:

    我自己最近刚刚完成了这项工作,我会说 v401 遇到了很多问题,并且出现错误或链接问题。成功让我与以下人员合作;

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

    1. 从 github 下载/克隆主 Asset-Importer-Lib: 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 64bit。
    5. 使用 Visual Studio 加载“..\MyDocuments\assimp\assimp-master\build\Assimp.sln”。
    6. 右键单击“ALL_BUILD”并选择“构建”。这将需要几分钟。一旦完成并且没有错误,它应该在其中创建必要的 *.dll/*.lib ..\MyDocuments\assimp\assimp-master\build\code\Debug
    7. 在现有项目中链接并包含相关的 *.lib 以及 “..\MyDocuments\assimp\assimp-master\include\assimp”文件夹。您还需要确保 *.dll 文件与您正在运行的 *exe 位于同一文件夹中或包含在其中。
    8. 您可能还需要从 ..\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 项目上执行相同操作)。

    1. 与上述相同,但现在还需要将您的项目链接到 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。
    猜你喜欢
    • 2018-07-23
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 2012-06-29
    • 2018-05-11
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多