【问题标题】:undefined reference to `SDL_Init' in an external library外部库中对“SDL_Init”的未定义引用
【发布时间】:2020-01-20 23:21:19
【问题描述】:

所以我在外部库中创建一个类以在 SDL 项目中使用它。 当使用单个文件时,sdl 链接正确并且工作正常。但是当我使用外部库时 我得到 Screen.cpp:7: undefined reference to `SDL_Init' 我使用 main.cpp、Screen.cpp 和 Screen.h 这是 Screen.h

#ifndef TEST_CLASSSDL_SCREEN_H
#define TEST_CLASSSDL_SCREEN_H
#include "C:/dev/i686-w64-mingw32/include/SDL2/SDL.h"
    class Screen {
    public:
        void init();
    };
#endif

这是 Screen.cpp

#include "Screen.h"
void Screen::init() {
SDL_Init(SDL_INIT_VIDEO);
}

和 CMakeLists.txt(被 clion 使用,在这里非常重要)

cmake_minimum_required(VERSION 3.15)
project(test_classSDL)
set(SDL2_LIB_DIR C:/dev/i686-w64-mingw32/lib)
include_directories(C:/dev/i686-w64-mingw32/include)

add_definitions(-DSDL_MAIN_HANDLED)
add_executable(${PROJECT_NAME}  ${SDL2_LIB_DIR}/libSDL2.dll.a
        ${SDL2_LIB_DIR}/libSDL2main.a ${SDL2_LIB_DIR}/libSDL2_image.dll.a main.cpp Screen.cpp Screen.h)

非常感谢您的帮助。

【问题讨论】:

  • 您可以尝试使用查找脚本here。我不认为你真的想要#include..中的绝对路径。

标签: c++ sdl sdl-2 clion


【解决方案1】:
  1. add_executable 中不需要 Screen.h
  2. 要告诉编译器您的目标(即可执行文件)应该链接到哪个库,请使用target_link_libraries

将您最后的 add_executable 语句替换为:

add_executable(${PROJECT_NAME} main.cpp Screen.cpp)
target_link_libraries(
  ${PROJECT_NAME} ${SDL2_LIB_DIR}/libSDL2.dll.a ${SDL2_LIB_DIR}/libSDL2main.a
  ${SDL2_LIB_DIR}/libSDL2_image.dll.a)

【讨论】:

猜你喜欢
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
相关资源
最近更新 更多