使用 CMake 对 SDL 的未定义引用
Posted
技术标签:
【中文标题】使用 CMake 对 SDL 的未定义引用【英文标题】:Undefined reference to SDL with CMake 【发布时间】:2015-04-02 13:31:57 【问题描述】:我正在使用 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
【问题讨论】:
您不需要添加所有标题。通常它们与您的目标相关,并且会自动找到。 【参考方案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_LIBS
与 SDL_LIBRARIES
不是同一个变量。在第一种情况下,CMake 只是将其评估为空字符串,因此您最终会链接到任何库。以上是关于使用 CMake 对 SDL 的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章
即使在链接库时,也会获得对 OpenCV 元素的未定义引用。使用 CMake
对`__glewCreateShader`的未定义引用[重复]
libVLC|make:对“libvlc_new”的未定义引用