【问题标题】:JetBrains CLion gives "undefined reference to" error when running project but command line compiles just fineJetBrains CLion 在运行项目时给出“未定义的引用”错误,但命令行编译得很好
【发布时间】:2021-01-30 08:49:59
【问题描述】:

运行 Ubuntu 操作系统,最新的 LTS 版本。当我运行该项目时,它给了我许多“未定义的引用(来自 SDL 库的函数)”,但是当我在命令行中使用

g++ main.cpp -lSDL -lSDL_ttf

它可以很好地编译成一个 .out 文件并且可以运行。

我在 StackOverflow 上尝试了许多其他人共享的方法,但都没有奏效。

这是我的 CMakeLists 文件:

cmake_minimum_required(VERSION 3.16)
project(Epic)

set(CMAKE_CXX_STANDARD 14)

add_executable(Epic main.cpp)

我的包括:

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>

我应该怎么做才能解决这个问题?

【问题讨论】:

    标签: c++ g++ clion jetbrains-ide


    【解决方案1】:

    您的 CMakeLists.txt 未指示链接任何库。仅仅包含 SDL 头文件就告诉编译器您打算使用这些函数;它没有说在哪里可以找到它们。您需要在 CMakeLists.txt 中添加 TARGET_LINK_LIBRARIES(Epic SDL SDL_tff) 语句。

    【讨论】:

    • 非常感谢您的回复。它仍然失败,一旦我刷新 cmakelists.txt,它就会给我这个错误: CMakeLists.txt:6 (TARGET_LINK_LIBRARIES) 处的 CMake 错误:无法为该项目未构建的目标“Epic”指定链接库。我该如何解决这个问题?
    • @YesPleaseAllah 你在哪里添加了声明?您应该在 ADD_EXECUTABLE 语句之后添加它。
    • 这次它给了我一个不同的错误。 /usr/bin/ld: 找不到 -lSDL /usr/bin/ld: 找不到 -lSDL_tff 好像根本不希望我在 clion 中编译,哈哈。
    • 您可以在 TARGET_LINK_LIBRARIES 语句之前添加 LINK_DIRECTORIES(),其中 是 SDL 和 SDL_ttf 库所在的目录。我认为第二个库也应该是 SDL_ttf。
    猜你喜欢
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2017-12-13
    • 2012-08-22
    • 2014-12-23
    • 2021-12-23
    • 2012-08-18
    • 2016-11-11
    相关资源
    最近更新 更多