誰かが私のfindコマンドがlsコマンドのようにlib64の結果を報告しない理由を理解するのに役立ちますか? (このコマンドはDebianのmakefileから呼び出されます。)
LIBXML2 = $(shell find /usr/lib* -name libxml2.so.2.*)
LIBXML2_LS = $(shell ls -1 /usr/lib*/libxml2.so.2.*)
以下は出力です
@echo LIBXML2: "$(LIBXML2)"
LIBXML2: /usr/lib/libxml2.so.2.7.8 /usr/lib32/libxml2.so.2.7.8
@echo LIBXML2_LS: "$(LIBXML2_LS)"
LIBXML2_LS: /usr/lib32/libxml2.so.2.7.8 /usr/lib64/libxml2.so.2.7.8 /usr/lib/libxml2.so.2.7.8
答え1
スティーブン・ハリスは次のように指摘する。、/usr/lib64
おそらくシステムのシンボリックリンクです。find /usr/lib64
、find
traverse を呼び出すと/usr/lib64
ディレクトリではないように見えるため(シンボリックリンク)、再帰はありません。
find
ディレクトリへのシンボリックリンクであることを確認するには、/usr/lib64
スラッシュを追加します。ディレクトリのシンボリックリンク名の末尾にスラッシュを追加すると、リンクではなくターゲットディレクトリとして解釈されます。
また、パターンを-name
引用符で囲みます。それ以外の場合は、現在のディレクトリに一致するファイルがある場合は展開されます。
LIBXML2 = $(shell find /usr/lib*/ -name 'libxml2.so.2.*')
しかし、これは悪い考えなので注意してください。すべてを繰り返すのは/usr/lib
非常に遅く、リンクしたくないライブラリの個人用コピーまたは類似の名前を持つ関連のないファイル(たとえば、いくつかのドキュメントファイルlibxml.so.2.txt
)を見つけることができます。
このように図書館を見つける理由はほとんどありません。ライブラリが標準システムの場所(たとえば、探している場所)にある場合、リンカは明示的なパスを提供せずに-lxml2
。configure
。 libxmlの場合、部品を見つける正しい方法は次のとおりです。パッケージ構成:
CFLAGS += $$(pkg-config --cflags libxml-2.0)
LDFLAGS += $$(pkg-config --libs libxml-2.0)