跳至内容

lib

lib 声明将属于一个库的 C 函数和类型分组在一起。

@[Link("pcre")]
lib LibPCRE
end

虽然编译器不强制执行,但 lib 的名称通常以 Lib 开头。

属性用于将标记传递给链接器以查找外部库

  • @[Link("pcre")]-lpcre 传递给链接器,但编译器会首先尝试使用 pkg-config
  • @[Link(ldflags: "...")] 将这些标记直接传递给链接器,不进行修改。例如:@[Link(ldflags: "-lpcre")]。一个常见的技巧是使用反引号执行命令:@[Link(ldflags: "`pkg-config libpcre --libs`")]
  • @[Link(framework: "Cocoa")]-framework Cocoa 传递给链接器(仅在 macOS 中有用)。

如果库是隐式链接的,则可以省略属性,例如 libc 的情况。

反射

Lib 函数在程序中任何地方的宏语言中都是可见的,使用 TypeNode#methods 方法。

lib LibFoo
  fun foo
end

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