Ошибка при компиляции программы, которая использует Assimp с MinGW в CLion - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь скомпилировать программу на CLion, которая использует библиотеку Assimp, используя компилятор MinGW. При сборке проекта он получает до 77% и выдает следующую ошибку в файле «SMDLoader.cpp.obj»:

C:\Dev\AssimpTest\cmake-build-debug\_deps\assimp-src\code\SMDLoader.cpp: In member function 'void Assimp::SMDImporter::GetAnimationFileList(const string&, Assimp::IOSystem*, std::vector<std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)':
C:\Dev\AssimpTest\cmake-build-debug\_deps\assimp-src\code\SMDLoader.cpp:579:47: error: 'strtok_s' was not declared in this scope
 tok1 = strtok_s(&buf[0], "\r\n", &context1);
                                           ^
_deps\assimp-build\code\CMakeFiles\assimp.dir\build.make:2246: recipe for target '_deps/assimp-build/code/CMakeFiles/assimp.dir/SMDLoader.cpp.obj' failed

Это файл CMakeLists.txt, который я использую:

cmake_minimum_required(VERSION 3.13)
project(AssimpTest)

set(CMAKE_CXX_STANDARD 11)

find_package(assimp 4.1.0 QUIET)

if (NOT assimp_FOUND)
include(FetchContent)

FetchContent_Declare(
        assimp
        URL https://github.com/assimp/assimp/archive/master.tar.gz
)

FetchContent_GetProperties(raylib)
if (NOT assimp_POPULATED)
    set(FETCHCONTENT_QUIET NO)
    FetchContent_Populate(assimp)

    set(CMAKE_BUILD_TYPE release CACHE STRING "" FORCE)
    set(ASSIMP_BUILD_TESTS OFF CACHE BOOL "" FORCE)

    add_subdirectory(${assimp_SOURCE_DIR} ${assimp_BINARY_DIR})

endif()

endif()

add_executable(AssimpTest main.cpp)
target_link_libraries(${PROJECT_NAME} assimp)

Вот основной файл, который я пытаюсь скомпилировать, на всякий случай:

#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>

int main() {
    Assimp::Importer importer;

    const char* pFile = R"(C:\Dev\raycast\models\teapot.fbx)";

    const aiScene* scene = importer.ReadFile( pFile,
                                          aiProcess_CalcTangentSpace       |
                                          aiProcess_Triangulate            |
                                          aiProcess_JoinIdenticalVertices  |
                                          aiProcess_SortByPType);
    if( !scene)
    {
        printf(importer.GetErrorString());
        return -1;
    }
    printf("Num meshes: %i", scene->mNumMeshes);

    return 0;
}

Основная причина, по которой я пытаюсь использовать Assimp, заключается в импорте моделей .fbx в мою программу, поэтому, если есть какой-либо способ оптимизировать все эти настройки только для этого, это было бы очень полезно! Информация, которую я нашел об использовании этой библиотеки с MinGW в Интернете, была очень скудной.

В любом случае спасибо заранее за помощь.

1 Ответ

0 голосов
/ 28 января 2019

Если вам не нужен загрузчик SMD, вы можете просто отключить его.Перейдите в Файл -> Настройки -> Построить, Выполнить, Развернуть -> CMake и вставить "-DASSIMP_BUILD_SMD_LOADER = NO" (без "") в опции CMake

...