【发布时间】:2014-07-14 01:36:55
【问题描述】:
我正在寻找使用 SDL2 和 SDL_image 和 cmake 编译 c++ 程序的最简单方法。
经过数小时的搜索,这是我最好的尝试:
CMakeLists.txt
project(shooter-cmake2)
cmake_minimum_required(VERSION 2.8)
set(SOURCES
shooter.cpp
classes.cpp
utils.cpp
)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_executable(${PROJECT_NAME} ${SOURCES})
INCLUDE(FindPkgConfig)
PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2_image REQUIRED sdl2_image)
INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${SDL2IMAGE_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARY})
我收到以下错误:
In function `loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, SDL_Renderer*)':
undefined reference to `IMG_LoadTexture'
collect2: ld returned 1 exit status
这里是函数调用:
#include "SDL.h"
#include "SDL_image.h"
SDL_Texture* loadTexture(const std::string &file, SDL_Renderer *ren){
SDL_Texture *texture = IMG_LoadTexture(ren, file.c_str());
texture != nullptr or die("LoadTexture");
return texture;
}
我很绝望。请帮我! 谢谢! :)
【问题讨论】:
-
请记住,SDL 是一个 C 库,而不是 C++ 库。因此,使用像
std::string这样的 C++ 类作为参数很可能不起作用。 -
另外,由于您是 SO 新手,如果您对构建(编译器或链接器)错误有任何疑问,请包括 complete 和 unedited 在您的问题中记录错误,包括导致错误的代码(最好是Minimal, Complete, and Verifiable example)。在您的情况下,请编辑您的问题以包含您调用
IMG_LoadTexture的代码以及足够的上下文以理解代码(如变量声明等)。 -
不知道任何 cmake 细节,但你不应该加上
${SDL2_IMAGE_LIBRARIES}吗? -
@keltar 我试过了:同样的错误。 (我编辑了我的帖子)
标签: c++ cmake sdl sdl-2 sdl-image