0

lauchpad でパッケージをビルドしようとしています。ビルドするには、automake で LDADD 変数を使用して静的パスを設定する必要があります。

relay_LDADD = /usr/lib/x86_64-linux-gnu/libm.so /usr/lib/x86_64-linux-gnu/libX11.so.6 $(RELAY_LIBS)

これは 64 ビット ビルドではコンパイルできますが、32 ビット ビルドでは失敗します。PKG_CHECK_MODULES を使用してみましたが、

No package 'm' found
No package 'X11' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

ランチパッドが構築を行っているため、非標準のパスではないことを知っていますか? どうすればこれを機能させることができますか?

パッケージが build-require でライブラリを指定しているにもかかわらず、ライブラリが指定されていないとビルドが失敗しました。

4

1 に答える 1

4

あなたはビルドシステムの裏をかこうとしましたが、裏切られました。

通常、パスをハードコーディングするのはお勧めできません。

Debian (そして ubuntu は単なる派生物です) は、単一のシステムに複数のアーキテクチャをインストールできるように、アーキテクチャに依存するディレクトリにバイナリ (ライブラリなど) を出荷し始めました。

これらのライブラリは、アーキテクチャ/usr/lib/<host-triplet><host-triplet>依存する にインストールされます。たとえば、 Linuxgnuツールを備えたシステムx86_64-linux-gnuamd64アーキテクチャです。通常、32 ビット システムのホスト トリプレットは.i386-linux-gnu

ライブラリ パスを 64 ビットの場所 ( ) にハードコーディングしているため、これは64 ビット/linux/gnu/usr/lib/x86_64-linux-gnu/libm.so以外のすべてのシステムで失敗します。

代わりに、リンカにmライブラリ ( libm) に対してリンクするように指示し、X11ライブラリ ( libX11) に対してリンクするように指示する必要があります。リンカが正しいアーキテクチャを選択できるようにします。

relay_LDADD = -lm -lX11 $(RELAY_LIBS)

一般に、ライブラリfooに対してリンクするlibfoo.so場合は、使用するライブラリ ファイルを提供します(先頭と末尾-lfooの を取り除きます)。lib.so

ただし、これだけでは不十分な場合もあります。そのような場合、ライブラリは、このライブラリに対してコンパイル/リンクするために必要な完全pkg-configなものを提供するために使用する場合があります。CFLAGSLDFLAGS

たとえば、使用したい場合libquicktime

 $ pkg-config --cflags libquicktime
 -I/usr/include/lqt
 $ pkg-config --libs libquicktime
 -lquicktime -lpthread -lm -lz -ldl

だから私は次のようなものを使用します:

  myprog_CFLAGS += $(shell pkg-config --cflags libquicktime)
  myprog_LDADD += $(shell pkg-config --libs libquicktime)

これは、任意の GNU(?) Makefile (autotools とは関係ありません) で機能します。autotools プロジェクトでは、おそらくconfigurem4-macro を使用して、 pkg-config チェックを に移動します。PKG_CHECK_MODULES

于 2015-07-06T11:28:01.120 に答える