我是QtCreator和CMake的新手,我无法理解为什么以下设置会给我一个“未解析的外部符号”。
我错过了什么?
修改
@ixSci那个Find_package(opengl)就在那里,但我想这不是必需的..这是我现在拥有的更清洁的cmakelists:
project(test)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
include_directories(../../glfw/glfw-2.7.7/include)
link_directories(../../glfw/glfw-2.7.7/lib-msvc110)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} opengl32 glfw)
感谢。
答案 0 :(得分:0)
似乎GLFW是OpenGL的一些开源库。所以你试图使用find_package(opengl)
找到它,但这是错误的。 GLFW不是OpenGL的一部分。您需要应用其他方法,例如为cmake下载一些3rdpart GLFW finder。 One我找到了。您需要下载它,存储在某处(例如,在源代码树中),然后将此路径添加到cmake文件顶部的cmake SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "YOUR_PATH_GOES_HERE")
。
完成后,您可以使用FIND_PACKAGE(GLFW REQUIRED)
并在${GLFW_LIBRARY}
target_link_libraries
答案 1 :(得分:0)
bash.d建议我尝试使用:
target_link_libraries(${PROJECT_NAME} glfwdll)
但我收到了这个错误:
启动E:\ opengl \ test \ test.exe ... 该计划意外完成。 E:\ opengl \ test \ test.exe退出,代码为-1073741515
然后我尝试使用:
target_link_libraries(${PROJECT_NAME} glfw)
但是这次我删除了#define GLFW_DLL
并且它有效。
不确定原因。
如果有人能解释如何正确使用glfwdll.lib,以及为什么我无法使用它,那就太棒了。
谢谢大家。
答案 2 :(得分:0)
看起来你正在混合静态和动态链接。你必须选择使用其中任何一种。
当您使用target_link_libraries(${PROJECT_NAME} glfwdll)
时,您正在使用动态链接,即链接到库的dll版本。在这种情况下,您应该将GLFW.dll文件与生成的可执行文件放在同一文件夹中,以便能够运行该程序。似乎使用库的DLL版本需要定义标志GLFW_DLL
。最好使用add_definitions(-DGLFW_DLL)
在CMake中定义它,而不是将其放在源文件中。
静态链接更容易处理,只需使用target_link_libraries(${PROJECT_NAME} glfw)
即可。您不需要文件GLFWDLL.lib
和GLFW.dll
。
因此,通过动态链接,您的CMakeLists.txt
可能如下所示(从源文件中删除#define GLFW_DLL
)。
cmake_minimum_required(VERSION 2.8)
project(test)
aux_source_directory(. SRC_LIST)
include_directories(../../glfw/glfw-2.7.7/include)
link_directories(../../glfw/glfw-2.7.7/lib-msvc110)
add_definitions(-DGLFW_DLL)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} opengl32 glfwdll)
如果您想更改为静态链接,只需将最后三行更改为
即可#add_definitions(-DGLFW_DLL)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} opengl32 glfw)
希望它有所帮助!上面的所有代码都是未经测试的: - )