【问题标题】:Compiling a C project along with two libraries编译一个 C 项目和两个库
【发布时间】:2015-10-01 20:04:03
【问题描述】:

我正在开发一个用于 Linux 环境的 C 项目(使用 gcc 编译)。我正在使用两个库:

  • SDL image(源码存放在目录SDL_img)。
  • SDL TTF(源码存放在目录SDL_ttf)。

我的CFLAGS 变量:

CFLAGS = -std=c99 -pedantic-errors -Wall -g -lm `sdl-config --cflags` -ISDL_img -ISDL_ttf

如您所见,我包含了这两个库目录。

我的 gcc 命令包括以下内容:

`sdl-config --libs` -lSDLmain -lSDL -lSDL_img -lSDL_ttf

最后,在我的项目中,我有以下内容:

#include "SDL_ttf.h"
#include "SDL_image.h"

由于某种原因,我收到以下类型的错误:

undefined reference to 'IMG_Load'

为什么?

编辑:

all: Chess.o Commons.o Console.o Controls.o Coords.o File.o GameState.o GUI.o Keyboard.o List.o Minimax.o Move.o Piece.o SettingsState.o Slots.o Square.o Str.o
    gcc  $^ -lm -std=c99 -pedantic-errors -g -o Chess `sdl-config --libs` -lSDLmain -lSDL -lSDL_img -lSDL_ttf

【问题讨论】:

  • 在 makefile 中显示完整的编译命令并运行该命令和完整的错误上下文。
  • 已编辑。至于完整的错误上下文,我认为不需要 - 只是一堆 undefined reference 错误(以及其他一些不相关的错误)
  • @hibyte,您可能是对的,错误上下文没有帮助,但拒绝提供帮助的人的信息请求对您没有好处。如果您可以确定哪些信息是相关的,哪些信息不相关,那么您可能不需要提出这个问题。
  • SDL_Img 库(可能包含 IMD_Load 符号)在哪里?
  • 我自己,我会在错误消息中查找抱怨无法找到libSDL_img 的消息。这不仅很容易解释问题,而且在我的环境中,您似乎想要的库拼写为libSDL_image(与与该库相关的任何目录的名称没有任何必要的关系)。

标签: c linux gcc makefile


【解决方案1】:

只需 cd 到那些 src/SDL_xxx 目录并执行 make 来构建这些库,然后设置正确的 -L 和 -I。链接失败,所以 -I 是“好”,但您的库路径不正确

基本上,链接器现在正在搜索其路径以找到 libSDL_img 和 libSDL_ttf,然后它还会搜索 /usr/lib/x86_64-linux-gnu 但它仍然找不到它,这就是你得到未定义的引用的原因。

要解决这个问题:首先构建那些 SDL_xxx,然后搜索这些库在哪里,并将类似这样的东西与其他东西一起传递给 gcc:

-Lsrc/SDL_img/lib -lSDL_img  -Lsrc/SDL_ttf/lib -lSDL_ttf

【讨论】:

  • 这些库中没有makefile。不过有makefile.inmakefile.am
  • 可以从makefile自动完成吗?
  • 我已经阅读了脚本configure应该先执行,但我没有这样做的权限。有解决办法吗?
  • 是的,应该先使用configure,为什么你没有权限?如果您在这些目录中执行 ls -al ,那么那里的用户是什么?您是否在根目录下下载了这些文件并在普通用户下执行此操作?如果是这种情况,那么您可以 sudo chown user:group -R dir 获得权限
猜你喜欢
  • 2015-04-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 2017-08-23
相关资源
最近更新 更多