在 Linux 上,使用 cmake、SDL 和 SDL_Image,我不断收到 IMG_Load() 的未定义引用错误,我不确定为什么。有人能帮助我吗? [重复]

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

我正在制作一个 C++ 项目以获取乐趣。然而我被这个错误难住了。 我的 cmake 文件构建良好,但尝试运行会出现错误:

undefined reference to 
IMG_Load'`。

我使用的是 Arch Linux,并且我已经从源代码安装了 SDL2,并从源代码安装了 SDL_Image。所以我很确定所有需要的内容都已到位。

我的 CMake 文件:

CMAKE_MINIMUM_REQUIRED(VERSION 3.27.4)

project(Origin)

find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)

set(
    SOURCES 
    src/main.cpp 
    src/game.cpp
)

add_executable(Origin ${SOURCES})

include_directories(
    Origin 
    ${SDL2_IMAGE_INCLUDE_DIRS}
    ${SDL2_INCLUDE_DIRS} 
    headers/
)

target_link_libraries(
    Origin 
    ${SDL2_IMAGE_LIBRARIES}
    ${SDL2_LIBRARIES} 
) 

这显示没有错误,并且通过 VSCode 运行

build
,工作正常。尝试
run
之后显示未定义的错误。

我确信我做错了什么,但我不知道是什么。我真的很感激任何帮助。 谢谢!

我尝试过的事情:

我尝试仔细检查 SDL 库变量的名称,并确保找到它们。据我所知,他们被发现了。

我已经按照我认为最好的顺序重新排列了我的 cmake 文件,这样 cmake 就不会尝试以不正确的顺序执行操作。

我搜索了谷歌,只发现这是一个链接错误,这就是为什么我在这里问我的问题。

我删除了 IMG_Load 函数以确保我的项目构建并运行。确实如此,没有错误。

c++ cmake sdl-2 sdl-image
1个回答
0
投票

看起来您已经为 SDL2 和 SDL2_image 正确设置了 CMakeLists.txt 文件。但是,“未定义对 IMG_Load 的引用”错误通常表示存在链接问题。要解决此问题,您需要确保 SDL2_image 库已正确链接。以下是帮助您调试和解决问题的几个步骤:

  1. 检查库名称: 首先,确保您链接到正确的 SDL2_image 库。 SDL2_image 的库名称可能会有所不同,具体取决于您的系统及其安装方式。尝试像这样更改您的 target_link_libraries 部分:

    target_link_libraries(Origin PRIVATE SDL2::SDL2 SDL2::SDL2_image)
    

    这假设您已将 SDL2 和 SDL2_image 作为 CMake 包安装。 “::”符号用于查找并链接正确的库。

  2. 验证安装: 仔细检查您是否已正确安装 SDL2_image。您提到您是从源代码安装的。确保您已成功编译并安装它,并且它位于 CMake 可以找到它的位置。确保 SDL2_image 库存在且可访问。

  3. CMake 缓存: 有时 CMake 缓存可能会导致问题。尝试删除 CMake 缓存并重建项目:

    rm -rf CMakeFiles CMakeCache.txt
    cmake .
    
  4. 完全重建: 有时,完全重建可以解决链接问题。尝试跑步:

    make clean
    make
    
  5. CMakeLists.txt 命令: 确保您的 CMakeLists.txt 文件与源文件位于同一目录中,并且 CMake 正确拾取该文件。项目目录中 CMakeLists.txt 和源文件的顺序有时会影响构建过程。

  6. 编译器标志: 检查您是否使用了正确的编译器标志。确保您没有无意中覆盖 CMakeLists.txt 或构建环境中的必要标志。

  7. 库路径: 验证系统中 SDL2 和 SDL2_image 的库路径设置是否正确。您可能需要更新 LD_LIBRARY_PATH 环境变量或将库路径添加到 CMakeLists.txt(如果它们不在标准搜索路径中)。

  8. IDE 特定问题: 如果您使用的是 Visual Studio Code 等 IDE,有时特定于 IDE 的配置可能会导致问题。确保您的 IDE 配置为使用正确的 CMakeLists.txt 文件和构建设置。

尝试这些步骤后,重建您的项目,“对 IMG_Load 的未定义引用”错误应该得到解决。如果您仍然遇到问题,请提供有关您的系统以及如何安装 SDL2 和 SDL2_image 的更多详细信息,这可以帮助进一步诊断问题。

© www.soinside.com 2019 - 2024. All rights reserved.