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]