【问题标题】:Undefined reference to SDL with CMake使用 CMake 对 SDL 的未定义引用
【发布时间】:2021-05-21 21:53:48
【问题描述】:

我正在使用 SDL (v1.2.15-7) 和 CMake (3.2.1) 开发一个项目。在 *.h 文件中,我添加了#include <SDL.h>,当我编译它时,我遇到了一堆错误:未定义对 SDL_ 的引用...

我认为错误来自 CMakeLists.txt 但我真的不知道在哪里。

这是文件内容:

    CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )

    SET( PROJ_NAME      "Project" )
    SET( PROJ_PATH      ${CMAKE_SOURCE_DIR} )
    SET( PROJ_OUT_PATH  ${CMAKE_BINARY_DIR} )
    SET( PROJ_INCLUDES  "include" )

    FILE( GLOB_RECURSE PROJ_SOURCES src/*cpp test/*cpp doc/*)
    FILE( GLOB_RECURSE PROJ_HEADERS ${PROJ_INCLUDES}/${PROJ_NAME}/*.h )

    PROJECT( ${PROJ_NAME} )

    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

    FIND_PACKAGE( SDL REQUIRED )

    SET( PROJ_LIBRARIES ${SDL_LIBS} )

    INCLUDE_DIRECTORIES( ${PROJ_INCLUDES} ${SDL_INCLUDE_DIR} )
    ADD_EXECUTABLE( ${PROJ_NAME} ${PROJ_SOURCES} ${PROJ_HEADERS} )
    TARGET_LINK_LIBRARIES( ${PROJ_NAME} ${PROJ_LIBRARIES} )

我也试过#include SDL/SDL.h

【问题讨论】:

  • 您不需要添加所有标题。通常它们与您的目标相关,并且会自动找到。

标签: c++ cmake sdl


【解决方案1】:

错误消息来自链接器,在这种情况下,这意味着您没有链接到 SDL 库。

CMake 文档指定FindSDL 模块定义了一个名为SDL_LIBRARY 的变量,但您使用的是SDL_LIBS。所以,改为SET(PROJ_LIBRARIES ${SDL_LIBRARY})

使用标准模块查找包时,请先尝试浏览文档以查看其定义的变量。名称并不总是标准的。

【讨论】:

    【解决方案2】:

    尝试使用SDL_LIBRARY 而不是SDL_LIBS

    【讨论】:

    • 谢谢...感觉自己好傻,下次再仔细看看
    • @Kruncho:使用make VERBOSE=ON 你会看到库没有通过。下次:-)
    【解决方案3】:

    您忘记在 CMakeLists.txt 的最后一行将目标链接到 SDL_LIBRARIES

    链接器产生错误,因此它与您的包含无关。

    【讨论】:

    • 不,我没有忘记,它包含在SET( PROJ_LIBRARIES ${SDL_LIBS} ) 中。但是我还是试过了,还是不行
    • 他指的是你拼错了变量名。 SDL_LIBSSDL_LIBRARIES 不是同一个变量。在第一种情况下,CMake 只是将其评估为空字符串,因此您最终会链接到任何库。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2012-01-27
    • 2017-01-24
    • 1970-01-01
    • 2015-11-27
    • 2012-10-07
    • 2012-10-14
    相关资源
    最近更新 更多