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

Я нахожусь под Windows и разрабатываю приложение на C++, используя VS2017 (созданный с помощью Cmake). Я включаю библиотеку (в следующем: plib), которая сама зависит от Assimp (v3.1.1). Пока я не включаю какой-либо метод из Assimp, вся программа работает. Как только я включаю один заголовок Assimp и создаю объект, программа запускается при запуске с кодом возврата 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})

Выдержка из списков CMakeList:

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)

1 ответ

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

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

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

Другие вопросы по тегам