![Linux find 명령이 작동하지 않는 것 같습니다.](https://linux55.com/image/92195/Linux%20find%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EA%B2%83%20%EA%B0%99%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
누군가 내 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
, 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)