对外部库中SDL_Init的未定义引用

问题描述 投票:0回答:1

所以我正在外部库中创建一个类,以便在SDL项目中使用它。使用单个文件时,sdl已正确链接并可以正常工作。但是当我使用外部库时我得到Screen.cpp:7:对'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)

非常感谢您的帮助。

c++ sdl sdl-2 clion
1个回答
0
投票
  1. Screen.h中不需要add_executable
  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)

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.