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

스티븐 해리스(Stephen Harris)는 다음과 같이 지적한다., /usr/lib64아마도 시스템의 심볼릭 링크일 것입니다. find /usr/lib64, findtraverse 를 호출하면 /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)

관련 정보