CMake、GLFW3 OSX链接错误 我在克利永的简单C++项目中链接GLFW库已经有一段时间了。我已经讨论了存在的问题及其解决方案,但它们似乎对我的情况没有帮助。我的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}) 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

CMake、GLFW3 OSX链接错误 我在克利永的简单C++项目中链接GLFW库已经有一段时间了。我已经讨论了存在的问题及其解决方案,但它们似乎对我的情况没有帮助。我的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}) 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,c++,macos,cmake,glfw,clion,C++,Macos,Cmake,Glfw,Clion,我已经使用brew安装了GLFW3和GLFW2(显然,Cocoa需要v2,我不知道为什么)(brew安装GLFW2或brew安装GLFW3-with--build black--由于内部cmake错误,静态无法工作),还尝试了使用最新来源的手动编译GLFW 需要注意的是,我最近开始学习有关C++/CMake/CLion的知识,因此我可能会忘记这里的一些重要内容-请不要犹豫,询问更多信息,以便我可以添加这些信息 还值得注意的是,在Sierra OSX(目前正在运行最新的测试版)更新之前,我的应用程

我已经使用brew安装了GLFW3和GLFW2(显然,Cocoa需要v2,我不知道为什么)(brew安装GLFW2或brew安装GLFW3-with--build black--由于内部cmake错误,静态无法工作),还尝试了使用最新来源的手动编译GLFW

需要注意的是,我最近开始学习有关C++/CMake/CLion的知识,因此我可能会忘记这里的一些重要内容-请不要犹豫,询问更多信息,以便我可以添加这些信息

还值得注意的是,在Sierra 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})
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工作。尝试还包括碳/核心基金会,因为一些解决方案与此相关

实际上什么都不管用。

您需要添加:

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

make VERBOSE=1的输出是什么?作为一个随机选项,请确保下载os x图形工具:它们对调试opengl问题非常有用。检查哪些变量设置了
FindGLFW3.cmake
脚本。例如,设置前缀为
GLFW3_
的变量。(但您使用的是前缀为
GLFW_uwu
)的模块。我已经尝试了多个用于CMake for GLFW3 includes的模块。我已将我的更改为此处提出的版本,现在问题如下:
架构x86\u 64的未定义符号:“\u IioSplayCreateInfoDictionary”,引用自:libglfw3.a(cococoa\u monitor.m.o)中的getDisplayName“\u IOHIDDeviceCopyMatchingElements”,引用自:libglfw3.a中的matchCallback(cocoa_mogage.m.o)
和其他几行,而主题中提到的未定义符号不再显示(我想它们链接正确).解决这个问题有什么好运气吗?@ukaszModlińskiI尝试了不同的组合,也遵循了这个指南,但没有成功。首先要做的是想出一个手工编制的命令。你可以先运行make VERBOSE=1,让cmake打印出它实际上在做什么,然后复制粘贴它并开始调整t直到你用手把它弄好。