неопределенная ссылка на `SDL_Init 'во внешней библиотеке - PullRequest
0 голосов
/ 21 января 2020

поэтому я делаю класс во внешней библиотеке, чтобы использовать его в проекте SDL. при использовании одного файла SDL правильно связан и работает нормально . Но когда я использую внешнюю библиотеку, я получаю Экран. 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)

и большое спасибо за помощь.

1 Ответ

1 голос
/ 21 января 2020
  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)

...