【问题标题】:Including Assimp (V3.1.1) in a VS2017 project在 VS2017 项目中包含 Assimp (V3.1.1)
【发布时间】:2018-06-28 19:21:48
【问题描述】:

我在 Windows 下使用 VS2017(使用 Cmake 创建)开发一个 c++ 应用程序。我包括一个库(在以下内容中:plib),它本身依赖于 Assimp(v3.1.1)。只要我不包含 Assimp 的任何方法,整个程序就可以工作。只要我包含一个 Assimp-Header 并创建一个对象,程序就会在启动时崩溃并返回代码 0xc000007b。示例:

#include <assimp\Importer.hpp>
int main() {
    Assimp::Importer importer;
    return 0;
}

即使我评论 Assimp::Importer importer; 行,应用程序也会崩溃,直到我告诉 VS2017 不仅要构建项目文件,还要重新构建项目文件。谁能告诉我为什么会出现这个问题以及如何解决?

摘自我的 CMakeLists:

set(plib_DIR "C:/[...]/plib")
find_package(plib REQUIRED)

list(APPEND project_INCLUDES ${SCREEN_INCLUDE_DIRS})
list(APPEND project_LIBRARIES ${SCREEN_LIBRARIES})

plib 的 CMakeLists 节选:

set(ASSIMP_DIR ${assimp_DIR})
find_package(assimp REQUIRED)

list(APPEND project_INCLUDES ${ASSIMP_INCLUDE_DIRS})
list(APPEND project_LIBRARIES "${ASSIMP_LIBRARY_DIRS}/${ASSIMP_LIBRARIES}.lib")

assimp_DIR 设置为指向我下载 Assimp 3.1.1 版本并编译它的目录的环境变量。我将“lib32/assimp.lib”文件移动到“lib/assimp-vc100-mt.lib”,以便 Cmake 找到它。我还更改了 assimp-config.cmake.in 的开头,以便正确找到 ASSIMP_ROOT_DIR(我使用了 in-source-build):

get_filename_component(_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
#get_filename_component(_PREFIX "${_PREFIX}" PATH)
#get_filename_component(_PREFIX "${_PREFIX}" PATH)
get_filename_component(ASSIMP_ROOT_DIR "${_PREFIX}" PATH)

【问题讨论】:

    标签: c++ linker visual-studio-2017 assimp


    【解决方案1】:

    您尚未指定要使用来自 assimp 的静态库。所以我猜你想使用 Assimp 的 dll 版本:

    您的应用程序无法找到 assimp.dll。您需要将包含 assimp-dll 的文件夹添加到您的 PATH 变量中。另一种选择是将 dll 复制到应用程序的起始文件夹中。

    会发生什么: 当您的应用程序启动并运行时,您想从 assimp-lib 调用一个函数/类方法,它需要加载 dll,找不到它,您的应用程序将崩溃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多