Linux findコマンドが機能していないようです。

Linux findコマンドが機能していないようです。

誰かが私の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/lib64findtraverse を呼び出すと/usr/lib64ディレクトリではないように見えるため(シンボリックリンク)、再帰はありません。

findディレクトリへのシンボリックリンクであることを確認するには、/usr/lib64スラッシュを追加します。ディレクトリのシンボリックリンク名の末尾にスラッシュを追加すると、リンクではなくターゲットディレクトリとして解釈されます。

また、パターンを-name引用符で囲みます。それ以外の場合は、現在のディレクトリに一致するファイルがある場合は展開されます。

LIBXML2  = $(shell find /usr/lib*/ -name 'libxml2.so.2.*')

しかし、これは悪い考えなので注意してください。すべてを繰り返すのは/usr/lib非常に遅く、リンクしたくないライブラリの個人用コピーまたは類似の名前を持つ関連のないファイル(たとえば、いくつかのドキュメントファイルlibxml.so.2.txt)を見つけることができます。

このように図書館を見つける理由はほとんどありません。ライブラリが標準システムの場所(たとえば、探している場所)にある場合、リンカは明示的なパスを提供せずに-lxml2configure。 libxmlの場合、部品を見つける正しい方法は次のとおりです。パッケージ構成:

CFLAGS += $$(pkg-config --cflags libxml-2.0)
LDFLAGS += $$(pkg-config --libs libxml-2.0)

おすすめ記事