makefileのLDフラグで、/usr/libよりもプラットフォーム固有のライブラリがあるディレクトリの優先順位を指定する方が良いですか?

makefileのLDフラグで、/usr/libよりもプラットフォーム固有のライブラリがあるディレクトリの優先順位を指定する方が良いですか?

私のソリューション(Raspbian Buster用)のmakefileには、LDFLAGS次の定義が含まれています。

LDFLAGS=-L/usr/lib -L/usr/lib/arm-linux-gnueabihf

...標準libdirはプラットフォーム固有のlibdirよりも優先されます。残念ながら、/usr/lib古いC ++ ABIのためにリンクできないライブラリの1つを使用するのに問題があります。しかし、ディレクトリを変更すると、すべてがうまく動作します。

LDFLAGS=-L/usr/lib/arm-linux-gnueabihf -L/usr/lib

一般に、ジェネリックよりもプラットフォーム依存のlibdirを宣言する方が良いですか/usr/lib?ありがとうございます。

修正する:対応するレシピはかなり標準的で、次のようになります。

$(EXEC) : $(OBJECTS)
    $(CC) $(CFLAGS) $(OBJECTS) -o $(EXEC) $(LDFLAGS) $(LIBRARIES)

$(OBJECTS) : $(SRC)
    $(CC) $(CFLAGS) -c $(SRC)

答え1

LDFLAGS最後の手段として使用してください。 makefileで使用している場合、これはソフトウェアを移植不能にするのに最適な方法です。

必要なコマンドラインを直接使用するMakefileを作成することをお勧めしますld

たとえば、次のコマンドラインを使用できます。

 $(CC) $(CFLAGS) $(OBJECTS) -o $@ $(LDPATH:%=-L%) $(LIBRARIES)

そして図書館を検索するための検索ディレクトリのリストをLDPATH

のパターンマッチングマクロ拡張はLDPATHPOSIX仕様の一部ではありませんが、この機能は1986年にSunPro Makeによって導入され、make多くのmake実装によってコピーされましたsmakegnu make以前のバージョンがある場合は、コマンドラインから各ライブラリのディレクトリエントリを手動で検索するmake必要があります。-Lpath

関連情報