2016-10-18 2 views
0

Я некоторое время пытаюсь связать библиотеки GLFW с моим простым проектом C++ в CLion. Я рассмотрел существующие проблемы и их решения, но они, похоже, не помогают в моем случае. Мой CMakeLists файл выглядит следующим образом:Ошибка CMake, GLFW3 Ошибка привязки OSX

cmake_minimum_required(VERSION 3.6) 
project(TestGame) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -v") 

find_library(carbon_lib Carbon) 
find_library(cocoa_lib Cocoa) 
find_library(iokit_lib IOKit) 
find_library(corevideo_lib CoreVideo) 
find_library(opengl_lib OpenGL) 
find_library(corefoundation_lib CoreFoundation) 

set(frameworks 
    ${carbon_lib} 
    ${cocoa_lib} 
    ${iokit_lib} 
    ${corevideo_lib} 
    ${opengl_lib} 
    ${corefoundation_lib} 
    ) 

file(GLOB sources 
    "include/*.hpp" 
    "src/*.cpp" 
    "src/application/*.cpp" 
    "src/controlling/*.cpp" 
    "src/helper/*.cpp" 
    "src/render/*.cpp" 
    "src/texturing/*.cpp" 
    "src/translations/*.cpp" 
    "test/*.cpp" 
    ) 

find_package(GLEW REQUIRED) 
find_package(GLFW3 REQUIRED) 
find_package(SDL2 REQUIRED) 
find_package(GLM REQUIRED) 
find_package(SOIL REQUIRED) 

include_directories(${GLEW_INCLUDE_DIRS} ${GLFW_INCLUDE_DIR}  ${GLM_INCLUDE_DIR} ${SDL2_INCLUDE_DIR} ${SOIL_INCLUDE_DIRS} ${GLM_INCLUDE_DIRS}) 

add_executable(GameMain ${sources}) 
target_link_libraries(GameMain ${GLEW_LIBRARIES} ${GLFW_LIBRARIES} ${GLM_LIBRARIES} ${SDL2_LIBRARY} ${SOIL_LIBRARIES} ${frameworks}) 

У меня GLFW3 и GLFW2 (видимо, v2 требовался какао, и я понятия не имею, почему) устанавливается с помощью заваривания (заварить установить glfw2 или заварить установить glfw3 - с - build-bottle --static он не работает из-за внутренней ошибки cmake), также пробовал то же самое с вручную скомпилированным GLFW из последних источников.

Следует заметить, что я недавно начал изучать вещи о C++/CMake/CLion, поэтому я мог бы забыть о чем-то важном здесь - не стесняйтесь спрашивать больше информации, чтобы я мог добавить их.

Также стоит заметить, что до того, как Sierra OSX (в настоящее время работает последняя версия BETA), мое приложение просто отлично справилось без ошибок компоновщика. Ошибки компоновщика выглядят следующим образом:

Undefined symbols for architecture x86_64: 
    "_glfwCreateWindow", referenced from: 
     Application::Application(char const*, int, int) in  Application.cpp.o 
    "_glfwMakeContextCurrent", referenced from: 
     Application::Application(char const*, int, int) in  Application.cpp.o 
    "_glfwWindowHint", referenced from: 
     Application::Application(char const*, int, int) in Application.cpp.o 
    "_glfwWindowShouldClose", referenced from: 
     Application::run() in Application.cpp.o 

и относится к основным файлам входа, в которых создается окно. CLion не делает никаких предложений о том, чтобы что-либо было опущено, включая каталоги. Я попробовал с/без всех этих фреймворков, о которых было найдено, нашел решение, в котором Cocoa/IOKit/CoreVideo/OpenGL должны быть включены, чтобы заставить GLFW3 работать. Забастовки также включают Carbon/CoreFoundation, потому что некоторые решения были об этом.

Буквально ничего не работает.

+0

что выход сделать VERBOSE = 1? – xaxxon

+0

в качестве случайного в стороне, убедитесь, что вы загрузили графические инструменты os x: https://developer.apple.com/download/more/?=graphics, они очень полезны для отладки проблем с opengl. – xaxxon

+0

Проверьте, какие переменные задают ваш скрипт 'FindGLFW3.cmake'. Например. [this one] (https://github.com/OpenKinect/libfreenect2/blob/master/cmake_modules/FindGLFW3.cmake) устанавливает переменные с префиксом 'GLFW3_'. (Но вы используете префикс с 'GLFW_'). – Tsyvarev

ответ

0

http://www.glfw.org/docs/latest/build_guide.html#build_link_cmake_package

Вам нужно добавить:

target_link_libraries(LearnGLSL ..any other libraries... glfw) 
+0

Я пробовал разные комбинации, а также следил за этим руководством тоже без успеха. –

+0

Первое, что нужно сделать, это придумать созданную вручную команду. Вы можете начать с выполнения make VERBOSE = 1, чтобы получить cmake, чтобы распечатать то, что он на самом деле делает, а затем скопировать пасту и начать настраивать вещи, пока вы не получите ее вручную. – xaxxon

Смежные вопросы