Включение Assimp (V3.1.1) в проект VS2017

Я работаю под Windows и разрабатываю приложение на С++ с использованием VS2017 (созданного с помощью Cmake). Я включаю библиотеку (в следующем: 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})

Выдержка из CMakeLists от plib:

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 можно было найти правильно (я использовал исходную сборку):

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)

person René Martin    schedule 19.01.2018    source источник


Ответы (1)


Вы не указали, что хотите использовать статическую библиотеку из assimp. Итак, я предполагаю, что вы хотите использовать dll-версию Assimp:

Ваше приложение не может найти assimp.dll. Вам нужно добавить папку, содержащую assimp-dll, в переменную PATH. Другой вариант — скопировать dll в начальную папку вашего приложения.

Что происходит: когда ваше приложение запущено и работает, и вы хотите вызвать одну функцию/метод класса из assimp-lib, ему нужно загрузить dll, не может найти его, и ваше приложение рухнет.

person KimKulling    schedule 22.01.2018