Clion не может связать найденную библиотеку, хотя ручная компиляция работает - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь создать кроссплатформенное приложение openGL на macos, используя Clion. Сценарий Cmake правильно находит библиотеку assimp, но не может связать ее.

Я попытался переустановить assimp, затем перекомпилировать его. Затем я проверил, выполняет ли компиляция вручную эту работу (что удивительно).

Вот команда: clang main.cpp -std=c++11 -framework OpenGL -lglfw -lassimp -lglew -o main (работает и с g ++).

Вот мой CmakeList.txt:

cmake_minimum_required(VERSION 3.12)
project(OpenGlSetup)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/Modules/")
message(CMAKE_MODULE_PATH : ${PROJECT_SOURCE_DIR}/Modules/)

set(SOURCE_FILES main.cpp)
add_executable(OpenGlSetup ${SOURCE_FILES})

find_package(ASSIMP REQUIRED)
IF (NOT ASSIMP_FOUND)
message(WARNING ASSIMP-NOT-FOUND : ${ASSIMP_INCLUDE_DIRS})
ENDIF()

*** rest of the libraries are loaded in the same way, and they load properly (project compiles and run provided i remove assimp parts) **

include_directories(${OPENGL_INCLUDE_DIR} ${GLM_INCLUDE_DIRS} ${ASSIMP_INCLUDE_DIRS})
link_directories(${ASSIMP_INCLUDE_DIRS})
target_link_libraries(OpenGlSetup ${OPENGL_LIBRARY} ${GLEW_LIBRARY} ${ASSIMP_LIBRARIES} glfw)

Вот мое заявление:

#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>
#include <cmath>

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

    static void glfwError(int id, const char* description)
{
    std::cout << description << std::endl;
}

int main(int argc, char *argv[]) {
    if (!glfwInit()) {
        printf("failed to initialize GLFW.\n");
        return -1;
    }



    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, true);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    auto window = glfwCreateWindow(1000, 600, "awesome", nullptr, nullptr);
    if (!window) {
        return -1;
    }

    glfwMakeContextCurrent(window);
    if (glewInit()) {
        printf("failed to initialize OpenGL\n");
        return -1;
    }

    printf("OpenGL %s, GLSL %s\n", glGetString(GL_VERSION), glGetString(GL_SHADING_LANGUAGE_VERSION));

    while(!glfwWindowShouldClose(window)) {
        glClearColor(0.f,
                     0.f,
                     1.f,
                     1.f
                     );
        glClear(GL_COLOR_BUFFER_BIT);
        glfwSwapBuffers(window);
        glfwPollEvents();
    };

    Assimp::Importer importer;
    aiScene* scene;

    return 0;
}

Ошибка:

[ 50%] Building CXX object CMakeFiles/OpenGlSetup.dir/main.cpp.o
[100%] Linking CXX executable OpenGlSetup
ld: library not found for -lassimp
clang: error: linker command failed with exit code 1 (use -v to see.         invocation)
make[3]: *** [OpenGlSetup] Error 1
make[2]: *** [CMakeFiles/OpenGlSetup.dir/all] Error 2
make[1]: *** [CMakeFiles/OpenGlSetup.dir/rule] Error 2
make: *** [OpenGlSetup] Error 2
...