gfw3 OSX连接错误

CMake, GLFW3 OSX linking error

本文关键字:错误 连接 OSX gfw3      更新时间:2023-10-16

我已经挣扎了一段时间,现在链接GLFW库在我的简单c++项目在CLion。我已经研究了存在的问题和解决方案,但它们似乎对我的情况没有帮助。我的CMakeLists文件如下所示:

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是Cocoa需要的,我不知道为什么)使用brew安装(brew安装GLFW2或brew安装GLFW3 - with -build-bottle -static它不工作,因为内部cmake错误),也尝试了从最新的源代码手动编译GLFW。

值得注意的是,我最近开始学习关于c++/CMake/CLion的东西,所以我可能会忘记一些重要的东西在这里-不要犹豫,要求更多的信息,所以我可以添加这些。

值得注意的是,在Sierra OSX(目前运行最新测试版)更新之前,我的应用程序运行得很好,没有链接器错误。链接器错误如下:

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,因为一些解决方案是关于这些。

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

你需要添加:

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