5

Linuxにcライブラリをインストールするための一般的なアプローチは何ですか?

特に、これをコンパイルする目的で、このライブラリをインストールしたいと思います。

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

int main()
{
}

私が試したこと:

  • ここからバイナリを取得します
  • 中に入れて/etc/usr/clibs
  • このパスをに追加しました/etc/ld.so.conf

=>失敗しました。それでもファイルのコンパイルに失敗します。

ここから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.

わかりません。インストールの結果が存在するインストール用のスクリプトが必要です...

もう何を試してみたらいいのかわからない…これを理解するのに多くの時間を費やしてきたので、誰かがこれとあれを使って解決策を教えてくれたら素晴らしいと思います。一般的な質問への答えは大きなボーナスになります。

ありがとう。

4

3 に答える 3

7

ほとんどの 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 のコンパイルは、コンパイルとリンクの 2 つのステップで行われます。コンパイルはヘッダー ファイル ( .hfiles)のみを調べ、-Iディレクティブのみを考慮します。オブジェクトコード(.oファイル)を出力します。リンクはオプションのみを考慮し、オブジェクト コード内のシンボルを解決しようとします-L-l通常、図書館は/lib/usr/libとヘッダーはに住んでい/usr/includeます。ただし、ヘッダーは個別のサブディレクトリに分割されることが多いため、より具体的な-Iディレクティブが必要になります。一部のプログラムにはfoo-config、ライブラリに対してコンパイルするための適切なディレクティブを含むプログラムが含まれ始めました。pkg-config多くのライブラリ、特に GNOME に関連するライブラリで使用される汎用バージョンです。

これは、通常、a) ライブラリのソースのみを使用する (PERL、Python など) か、b) コンパイルに必要なすべての情報を含む実行形式を持つ (Java、C# など) 他の言語とは大きく異なります。

于 2012-08-24T03:25:23.620 に答える
2

sdl-configは、libsdlをインストールした結果として存在します。これは、libsdl-imageをインストールする前に実行する必要があります。

ディストリビューションに付属のパッケージをインストールしてみませんか?

于 2012-08-24T03:22:02.360 に答える
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

(どっかから勝手に引用したけどよくわからない)

于 2012-08-25T22:50:11.117 に答える