Skip to content


A lib declaration groups C functions and types that belong to a library.

lib LibPCRE

Although not enforced by the compiler, a lib's name usually starts with Lib.

Attributes are used to pass flags to the linker to find external libraries:

  • @[Link("pcre")] will pass -lpcre to the linker, but the compiler will first try to use pkg-config.
  • @[Link(ldflags: "...")] will pass those flags directly to the linker, without modification. For example: @[Link(ldflags: "-lpcre")]. A common technique is to use backticks to execute commands: @[Link(ldflags: "`pkg-config libpcre --libs`")].
  • @[Link(framework: "Cocoa")] will pass -framework Cocoa to the linker (only useful in macOS).

Attributes can be omitted if the library is implicitly linked, as in the case of libc.


Lib functions are visible in the macro language anywhere in the program using the method TypeNode#methods:

lib LibFoo
  fun foo

{{ LibFoo.methods }} # => [fun foo]