cmakelists链接库_c – 如何正确地将库与cmake链接?

本文讨论了一位开发者在使用CLion和CMake构建OpenGL项目时遇到的链接库问题。尽管代码在Visual Studio中正常工作,但在CLion中,CMakeLists.txt配置导致编译错误,主要是关于glew和SDL2库的未定义引用。开发者寻求解决如何正确配置CMakeLists.txt以使项目在CLion中顺利构建和运行。
摘要由CSDN通过智能技术生成

我无法使用我正在使用的其他库来正确链接到我的项目中.

我正在使用CLion,它使用cmake来构建它的项目.我试图将几个库与OpenGL结合使用来构建一些对象.我最初在Visual Studio中构建它,因为我无法弄清楚如何让cmake与Clion一起工作.但是,现在代码全部工作(无论如何都在Visual Studio中),我希望能够使用CLion,因为这是我首选的IDE.

我仍然是cmake的新手,我不明白我的CMakeLists.txt做错了什么.这是我有的:

cmake_minimum_required(VERSION 3.3)

project(texture_mapping)

find_package(OpenGL REQUIRED)

link_directories(${OPENGL_gl_LIBRARY})

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

set(SOURCE_FILES main.cpp camera.h display.h display.cpp mesh.cpp mesh.h obj_loader.cpp obj_loader.h shader.cpp shader.h stb_image.c stb_image.h texture.cpp texture.h transform.h)

link_directories(texture_mapping ${PROJECT_SOURCE_DIR}/lib)

add_executable(texture_mapping ${SOURCE_FILES})

target_include_directories(texture_mapping PUBLIC ${PROJECT_SOURCE_DIR}/include)

target_link_libraries(texture_mapping SDL2 SDL2main SDL2test glew32 glew32s ${OPENGL_gl_LIBRARY})

我调整它直到它没有在CLion中给我任何更多的错误,但我的代码仍然无法识别头文件.

这是我的项目的结构:

所以,我放了我需要的所有库,但它似乎没有在代码中识别它们. Clion在项目中识别它们(它们没有出现错误的红色),但是当它构建时(当我尝试在CLion中运行它时),我得到这些错误:

CMakeFilesexture_mapping.dir/objects.a(mesh.cpp.obj): In function `ZN4MeshD2Ev':

...texture-mapping/mesh.cpp:30: undefined reference to `_imp____glewDeleteVertexArrays'

CMakeFilesexture_mapping.dir/objects.a(mesh.cpp.obj): In function `ZN4Mesh8InitMeshERK12IndexedModel':

...texture-mapping/mesh.cpp:36: undefined reference to `_imp____glewGenVertexArrays'

...texture-mapping/mesh.cpp:37: undefined reference to `_imp____glewBindVertexArray'

...texture-mapping/mesh.cpp:39: undefined reference to `_imp____glewGenBuffers'

...texture-mapping/mesh.cpp:40: undefined reference to `_imp____glewBindBuffer'

...texture-mapping/mesh.cpp:41: undefined reference to `_imp____glewBufferData'

...texture-mapping/mesh.cpp:43: undefined reference to `_imp____glewEnableVertexAttribArray'

...texture-mapping/mesh.cpp:44: undefined reference to `_imp____glewVertexAttribPointer'

...texture-mapping/mesh.cpp:46: undefined reference to `_imp____glewBindBuffer'

...texture-mapping/mesh.cpp:47: undefined reference to `_imp____glewBufferData'

...texture-mapping/mesh.cpp:49: undefined reference to `_imp____glewEnableVertexAttribArray'

...texture-mapping/mesh.cpp:50: undefined reference to `_imp____glewVertexAttribPointer'

...texture-mapping/mesh.cpp:52: undefined reference to `_imp____glewBindBuffer'

...texture-mapping/mesh.cpp:53: undefined reference to `_imp____glewBufferData'

...texture-mapping/mesh.cpp:55: undefined reference to `_imp____glewBindVertexArray'

...texture-mapping/mesh.cpp:56: undefined reference to `_imp____glewBindVertexArray'

CMakeFilesexture_mapping.dir/objects.a(mesh.cpp.obj): In function `ZN4Mesh4DrawEv':

...texture-mapping/mesh.cpp:61: undefined reference to `_imp____glewBindVertexArray'

...texture-mapping/mesh.cpp:65: undefined reference to `_imp____glewBindVertexArray'

CMakeFilesexture_mapping.dir/objects.a(shader.cpp.obj): In function `ZN6ShaderC2ERKSs':

...texture-mapping/shader.cpp:5: undefined reference to `_imp____glewCreateProgram'

...texture-mapping/shader.cpp:11: undefined reference to `_imp____glewAttachShader'

...texture-mapping/shader.cpp:14: undefined reference to `_imp____glewBindAttribLocation'

...texture-mapping/shader.cpp:15: undefined reference to `_imp____glewBindAttribLocation'

...texture-mapping/shader.cpp:17: undefined reference to `_imp____glewLinkProgram'

...texture-mapping/shader.cpp:20: undefined reference to `_imp____glewValidateProgram'

...texture-mapping/shader.cpp:23: undefined reference to `_imp____glewGetUniformLocation'

CMakeFilesexture_mapping.dir/objects.a(shader.cpp.obj): In function `ZN6Shader4BindEv':

...texture-mapping/shader.cpp:28: undefined reference to `_imp____glewUseProgram'

CMakeFilesexture_mapping.dir/objects.a(shader.cpp.obj): In function `ZN6Shader6UpdateERK9TransformRK6Camera':

...texture-mapping/shader.cpp:35: undefined reference to `_imp____glewUniformMatrix4fv'

CMakeFilesexture_mapping.dir/objects.a(shader.cpp.obj): In function `ZN6ShaderD2Ev':

...texture-mapping/shader.cpp:42: undefined reference to `_imp____glewDetachShader'

...texture-mapping/shader.cpp:43: undefined reference to `_imp____glewDeleteShader'

...texture-mapping/shader.cpp:46: undefined reference to `_imp____glewDeleteProgram'

CMakeFilesexture_mapping.dir/objects.a(shader.cpp.obj): In function `ZN6Shader16CheckShaderErrorEjjbRKSs':

...texture-mapping/shader.cpp:79: undefined reference to `_imp____glewGetProgramiv'

...texture-mapping/shader.cpp:81: undefined reference to `_imp____glewGetShaderiv'

...texture-mapping/shader.cpp:86: undefined reference to `_imp____glewGetProgramInfoLog'

...texture-mapping/shader.cpp:88: undefined reference to `_imp____glewGetShaderInfoLog'

CMakeFilesexture_mapping.dir/objects.a(shader.cpp.obj): In function `ZN6Shader12CreateShaderERKSsj':

...texture-mapping/shader.cpp:96: undefined reference to `_imp____glewCreateShader'

...texture-mapping/shader.cpp:109: undefined reference to `_imp____glewShaderSource'

...texture-mapping/shader.cpp:110: undefined reference to `_imp____glewCompileShader'

CMakeFilesexture_mapping.dir/objects.a(texture.cpp.obj): In function `ZN7Texture4BindEj':

...texture-mapping/texture.cpp:36: undefined reference to `_imp____glewActiveTexture'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0x24): undefined reference to `SDL_SetMainReady'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0x55): undefined reference to `SDL_malloc'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0x84): undefined reference to `SDL_wcslen'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0xa5): undefined reference to `SDL_iconv_string'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0xcf): undefined reference to `SDL_free'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0xf4): undefined reference to `SDL_wcslen'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0x10f): undefined reference to `SDL_iconv_string'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0x143): undefined reference to `SDL_malloc'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0x17f): undefined reference to `SDL_free'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0x18b): undefined reference to `SDL_free'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0x1d6): undefined reference to `SDL_isspace'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0x295): undefined reference to `SDL_isspace'

...texture-mapping/lib/SDL2main.lib(./Win32/Release/SDL_windows_main.obj):(.text+0x3a2): undefined reference to `SDL_ShowSimpleMessageBox'

基本上,每次使用SDL和glew都会出错,但不是glm,这很奇怪.

我的CMakeLists.txt出了什么问题?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值