clang에서 `-llibary` 옵션을 사용해야 하는 경우

clang에서 `-llibary` 옵션을 사용해야 하는 경우

꼭 사용해야 하는지 궁금합니다.-llibclang의 옵션입니다. 예를 들어:

clang -lasdf foo.c -o foo.o

/usr/local/lib/libasdf.dylib라이브러리를 에 링크할 것이지만 foo.c이를 포함하지 않아도 되는 방법이 있는지 궁금합니다. 따라서 다른 시스템 라이브러리처럼 작동하므로 #include <math.h>아무 것도 링크할 필요가 없습니다.

아니면 아마도 그 사람들이 말하는 것일 수도 있겠네요여기:

libSystem 라이브러리에는 일반적으로 libc 및 libm, RPC 서비스 및 이름 확인자에서 찾을 수 있는 기능도 포함되어 있습니다. libSystem은 자동으로 애플리케이션에 연결되므로 이를 컴파일러의 링크 줄에 명시적으로 추가할 필요가 없습니다. 사용자의 편의를 위해 이러한 라이브러리 중 다수는 libSystem에 대한 기호 링크로 존재하므로 -lm에 대해 명시적으로 링크할 필요는 없지만(예를 들어) 오류가 발생하지 않습니다.

답변1

-llib옵션이 전달되는 Apple ld의 매뉴얼 페이지에서 :

-lx 이 옵션은 링커에게 라이브러리 검색 경로에서 libx.dylib 또는 libx.a를 검색하도록 지시합니다. 문자열 x가 yo 형식인 경우 해당 파일은 동일한 위치에서 검색되지만 파일 이름 앞에 'lib'를 추가하거나 '.a' 또는 '.dylib'를 추가하지 않습니다.

-l이를 통해 플래그가 수행하는 모든 작업은 링커에게 라이브러리를 찾은 다음 실행 파일에 연결하도록 지시하기 때문에 사용하지 않을 방법이 없는 것 같습니다 . 이는 참조한 libSystem 라이브러리의 일부가 아니기 때문에 자동으로 포함되지 않습니다. 이는 macOS에서 자동으로 연결된 유일한 라이브러리로 보입니다. /usr/local/lib/(적어도 MacOS에서는)에 있는 라이브러리는 자동으로 링크된다는 점에서 시스템 라이브러리가 아닙니다. /usr/local/lib는 일반적으로 사용자 설치 라이브러리에 사용되기 때문입니다.

관련 정보