在Linux上安装c库的一般方法是什么?
特别是,我想安装this库,目的是编译它:
#include <SDL_image.h> // it errs that it does not recognize this
int main()
{
}
我尝试过:
/etc/usr/clibs
/etc/ld.so.conf
=&GT;失败。仍然无法编译我的文件。
我从here
安装了rpm=&GT;失败,仍然无法编译
我尝试从源码构建:
运行configure
后,它说:
checking for sdl-config... no
checking for SDL - version >= 1.2.10... no
*** The sdl-config script installed by SDL could not be found
*** If SDL was installed in PREFIX, make sure PREFIX/bin is in
*** your path, or set the SDL_CONFIG environment variable to the
*** full path to sdl-config.
我不明白,它希望安装一个脚本,其安装的结果是安装......
我不知道该怎么办...我花了很多时间试图解决这个问题,所以如果有人可以给我一个解决方案来做这个和那个,那就太好了。对一般问题的回答将是一个很大的好处。
感谢。
答案 0 :(得分:4)
在大多数Linux发行版中,SDL库都提供了准备好的软件包。在Debian和Ubuntu上,你可以简单地sudo apt-get install libsdl-image1.2-dev
。在Red Hat,Fedora和CentOS中,您可以sudo yum install SDL_image-devel
。
您可以使用sdl-config
获取编译器的正确标志。 configure
脚本是用于发现正确标志的“自动”工具,但它非常复杂。如果您以前没有使用过C库,那就不是很明显了。 -I
标志将目录添加到#include
指令的搜索路径中。 -L
标志将库添加到库的搜索路径中,-l
尝试将库添加到程序中。编译C分两步进行,编译和链接。编译只查看头文件(.h
文件),只关心-I
指令;它输出目标代码(.o
文件)。链接仅关注-L
和-l
选项,并尝试解析目标代码中的符号。通常情况下,图书馆位于/lib
和/usr/lib
,标题位于/usr/include
。但是,标头通常被分解为单独的子目录,因此需要更具体的-I
指令。一些程序开始包含foo-config
程序,其中包含针对库进行编译的正确指令。 pkg-config
是许多库使用的通用版本,尤其是与GNOME相关的库。
这与其他语言非常不同,通常a)仅使用库的源(例如,PERL,Python)或b)具有包含编译所需的所有信息的可执行格式(例如,Java,C#)。
答案 1 :(得分:2)
sdl-config将作为安装libsdl的结果出现,您必须在安装libsdl-image之前执行此操作。
为什么不安装随发行版提供的软件包?
答案 2 :(得分:1)
解决方案: 我目前安装的软件包是:
libsdl1.2debian
libsdl-image1.2
libsdl1.2-dev的
libsdl-image1.2-dev
我可以编译并运行以下代码:
#include <SDL_image.h>
#include <math.h>
#include <stdio.h>
int main()
{
int x = sqrt(4);
SDL_Surface* s = IMG_Load("foo");
printf("%d %d", x, s);
return 0;
}
〜
使用命令:
gcc libTest.c `sdl-config --cflags` -Wall -O6 -g -O2 -lSDL_image
(我从某个地方把它弄错了,我真的不明白)