【问题标题】:how to install c library on linux (in particular SDL_image)如何在 linux 上安装 c 库(特别是 SDL_image)
【发布时间】:2012-08-24 03:02:22
【问题描述】:

在 Linux 上安装 c 库的一般方法是什么?

特别是,我想安装this 库,目的是编译这个:

#include <SDL_image.h> // it errs that it does not recognize this

int main()
{
}

我尝试过的:

  • here获取二进制文件
  • 输入/etc/usr/clibs
  • 将此路径添加到/etc/ld.so.conf

=> 失败。仍然无法编译我的文件。

我从here安装了rpm

=> 失败,仍然无法编译

我尝试从源代码构建: 在运行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.

我不明白,它需要一个安装脚本,其存在是安装的结果...

我不知道该尝试什么了...我花了很多时间试图解决这个问题,所以如果有人可以给我一个解决方案来做这个和那个,那就太好了。回答一般问题将是一个很大的奖励。

谢谢。

【问题讨论】:

    标签: c linux dependencies installation


    【解决方案1】:

    在大多数 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#)。

    【讨论】:

    • 我安装了前面提到的软件包,当我尝试编译那个简单的例子时只包含头文件,它抱怨它不存在。有什么解决办法吗?我是完全愚蠢还是安装和使用 c 库的过程非常繁琐?没有自动化工具吗?
    【解决方案2】:

    sdl-config 将作为安装 libsdl 的结果出现,您必须在安装 libsdl-image 之前执行此操作。

    为什么不安装随发行版提供的软件包?

    【讨论】:

    • 我确实按照您的指示安装了该软件包。但是,在编译时我仍然会出错。它不知道头文件。见我上面的回复。
    • 根据您目前所讲的故事,您曾尝试从第三方源安装 rpm,并尝试自己编译库,但都失败了。这些失败尝试的残余可能会阻止事情正常工作。我建议你深呼吸,从头开始重写你的问题,并包含更多细节。不要只说“我有错误”。 给他们看!
    • 我已经清除了旧软件包的残余并安装了正确的软件包。我已经设法编译并运行了我的简单代码(请参阅下面的答案)。 (感谢您的帮助)
    【解决方案3】:

    解决方案: 我目前安装的包是:

    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
    

    (我从某处刻出来的,我不太明白)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 2015-03-19
      • 2015-07-26
      • 2015-10-30
      • 2019-02-10
      相关资源
      最近更新 更多