在VS2017项目中包括Assimp(V3.1.1)

时间:2018-01-19 14:12:18

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

我在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)

1 个答案:

答案 0 :(得分:0)

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

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

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