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