如何使用gcc和SDL_image库进行链接?

4
我有以下的脚本:

gcc -I /Library/Frameworks/SDL2.framework/Headers \
    -F /Library/Frameworks/ -framework SDL2 test.c

能够成功编译以下源代码的程序:
#include <SDL.h>
//#include "SDL_image.h"

int init();
int loadMedia();
void close();

SDL_Window* gWindow = NULL;
SDL_Surface* gScreenSurface = NULL;
SDL_Surface* gHelloWorld = NULL;

int init()
{
    int success = 1;

    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
    }
}

int main(int argc, char* args[])
{
    return 0;
}

我的问题是如何在添加了SDL_image库的情况下编译它?会像这样吗?
gcc -I /Library/Frameworks/SDL2.framework/Headers \
    -I /Library/Frameworks/SDL_image.framework/Headers \
    -F /Library/Frameworks/ -framework SDL2 test.c

当我尝试这个时,我得到了以下错误:
In file included from test.c:2:
/Library/Frameworks/SDL_image.framework/Headers/SDL_image.h:27:10:      fatal error: 
      'SDL/SDL.h' file not found 
`#include <SDL/SDL.h>`

有趣的是,你的“脚本”看起来恰好像C源代码。或者你是指隐藏在你的文本中的命令? - too honest for this site
1
我怀疑你实际上并不想将gcc与某个无关的库链接起来。但是,如果你想将你的应用程序与该库链接,并想知道如何告诉gcc这样做:(这是在所有源文件都干净地编译之后)`gcc <选项,如-g> <对象文件列表> -o <可执行文件名> -L<库路径> -l(小写'L')短库名称。注意:短库名称是指当完整库名称为'libmath.so'时,短库名称为'math'。要获取短库名称:删除前导的'lib'和从'.'开始的所有内容。 - user3629249
感谢您的快速回复。针对Olaf:我在谈论我的文本中隐藏的命令。该命令位于脚本文件中。我只是觉得一次执行此文件比在命令行上输入所有内容更容易。 - Rubberduccky
给用户3629249:我尝试了以下命令:“gcc test.c -o a.out -L /Library/Frameworks -l SDL2”和“gcc test.c -o a.out -L /Library/Frameworks -l SDL2.framework”,但都不起作用。也许我做错了什么?感谢您的快速回复。 - Rubberduccky
为什么你要明确地将框架头文件目录添加到包含列表中? - Jason
1个回答

0

您可以执行以下命令:

gcc -L/libs/path -I/headers/path -lSDL2 -lSDL2_image

在这种情况下,使用 #include "..." 来包含 SDL2 的头文件。

如果您使用软件包管理器安装了 SDL2,则上述命令可简化为:

gcc -lSDL2 -lSDL2_image

因为编译器已知道 SDL2 目录的路径。在这种情况下,您应该使用 #include <...>

您应该考虑为您的项目编写 Makefile。随着您的项目逐渐增长,编译会变得更加容易。


1
很抱歉我以为你在使用Linux。在Mac上,你需要将SDL2main.m和SDL2main.h放在你的项目目录中,并执行类似于gcc -I/Library/Frameworks/SDL2.framework/Headers test.c -o test SDL2main.m -framework SDL2的操作。当然,对于SDL2_image也是同样的做法。 - blakelead
1
“gcc -I/Library/Frameworks/SDL2.framework/Headers -I/Library/Frameworks/SDL_image.framework/Headers -F/Library/Frameworks -framework SDL2 -framework SDL_image test.c -o test”现在我收到一个错误,错误信息为:“从test.c:2包含的文件: /Library/Frameworks/SDL_image.framework/Headers/SDL_image.h:27:10: 致命错误:找不到'SDL/SDL.h'文件 #include <SDL/SDL.h>”,这个错误是由SDL_image.h文件引起的。当我删除每一行中带有“SDL/blah.h”的SDL时,错误就消失了。 - Rubberduccky
在使用SDL2时,您应该同时使用SDL2_image而不是SDL_image。我认为您正在混淆SDL库和SDL2库。 - blakelead
非常感谢!事实证明我使用的是SDL_image库而不是SDL2_image库。 - Rubberduccky
好的,我希望修复这个问题能解决你的困扰! - blakelead
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接