Включение 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, не может найти его, и ваше приложение вылетит.