外部库中对“SDL_Init”的未定义引用
undefined reference to `SDL_Init' in an external library
所以我在外部库中制作了一个 class 以便在 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)
非常感谢您的帮助。
Screen.h
在 add_executable
中不需要。
- 要告诉编译器您的目标(即可执行文件)应该 link 到哪个库,请使用 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)
所以我在外部库中制作了一个 class 以便在 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)
非常感谢您的帮助。
Screen.h
在add_executable
中不需要。- 要告诉编译器您的目标(即可执行文件)应该 link 到哪个库,请使用 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)