あなたはビルドシステムの裏をかこうとしましたが、裏切られました。
通常、パスをハードコーディングするのはお勧めできません。
Debian (そして ubuntu は単なる派生物です) は、単一のシステムに複数のアーキテクチャをインストールできるように、アーキテクチャに依存するディレクトリにバイナリ (ライブラリなど) を出荷し始めました。
これらのライブラリは、アーキテクチャ/usr/lib/<host-triplet>
に<host-triplet>
依存する にインストールされます。たとえば、 Linuxとgnuツールを備えたシステムx86_64-linux-gnu
のamd64アーキテクチャです。通常、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
なものを提供するために使用する場合があります。CFLAGS
LDFLAGS
たとえば、使用したい場合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 プロジェクトでは、おそらくconfigure
m4-macro を使用して、 pkg-config チェックを に移動します。PKG_CHECK_MODULES