lib
lib
lib 선언은 하나의 라이브러리에 속하는 C 함수와 타입들을 묶어주는 역할을 해요.
@[Link("pcre")]
lib LibPCRE
end
컴파일러가 강제하지는 않지만, lib의 이름은 보통 Lib로 시작하는 게 관례예요.
외부 라이브러리를 찾기 위해 링커에 플래그를 전달할 때는 어트리뷰트(attribute)를 사용해요:
@[Link("pcre")]는 링커에-lpcre를 전달해요. 다만 컴파일러는 그 전에 pkg-config를 먼저 사용하려고 해요.@[Link(ldflags: "...")]는 그 플래그를 수정 없이 링커에 그대로 전달해요. 예:@[Link(ldflags: "-lpcre")]. 명령을 실행하기 위해 백틱을 쓰는 방법도 흔히 쓰여요:@[Link(ldflags: "`pkg-config libpcre --libs`")].@[Link(framework: "Cocoa")]는 링커에-framework Cocoa를 전달해요 (macOS에서만 유용해요).
libc의 경우처럼 라이브러리가 암시적으로 링크된다면, 어트리뷰트는 생략해도 돼요.
출처: Crystal 공식 문서
본문
리플렉션 (Reflection)
lib 함수는 프로그램 어디에서든 TypeNode#methods 메서드를 사용해 매크로 언어에서 볼 수 있어요:
lib LibFoo
fun foo
end
{{ LibFoo.methods }} # => [fun foo]
더 알아보기
lib는 C 함수·타입을 묶고, 이름은 관례상Lib로 시작해요.- 링커 플래그는
@[Link]어트리뷰트로 전달하고, libc처럼 암시적 링크라면 생략 가능해요. - 리플렉션을 통해 매크로에서 lib 함수를 확인할 수 있어요.