编译C项目以及两个库

时间:2015-10-01 20:04:03

标签: c linux gcc makefile

我正在为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

1 个答案:

答案 0 :(得分:0)

只需cd到那些src / SDL_xxx dirs并执行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