# annotation Link

##
Overview

A `lib` can be marked with `@[Link(lib : String, *, ldflags : String, static : Bool, framework : String, pkg_config : String, wasm_import_module : String, dll : String)]` to declare the library that should be linked when compiling the program.

At least one of the lib, ldflags, framework arguments needs to be specified.

`@[Link(ldflags: "-lpcre")]` will pass `-lpcre` straight to the linker.

`@[Link("pcre")]` will lookup for a shared library.

1. will lookup `pcre` using `pkg-config`, if not found
2. will pass `-lpcre` to the linker.

`@[Link("pcre", pkg_config: "libpcre")]` will lookup for a shared library.

1. will lookup `libpcre` using `pkg-config`, if not found
2. will lookup `pcre` using `pkg-config`, if not found
3. will pass `-lpcre` to the linker.

`@[Link(framework: "Cocoa")]` will pass `-framework Cocoa` to the linker.

`@[Link(dll: "gc.dll")]` will copy `gc.dll` to any built program. The DLL name must use `.dll` as its file extension and cannot contain any directory separators. The actual DLL is searched among `CRYSTAL_LIBRARY_PATH`, the compiler's own directory, and `PATH` in that order; a warning is printed if the DLL isn't found, although it might still run correctly if the DLLs are available in other DLL search paths on the system.

When an `-l` option is passed to the linker, it will lookup the libraries in paths passed with the `-L` option. Any paths in `CRYSTAL_LIBRARY_PATH` are added by default. Custom paths can be passed using `ldflags`: `@[Link(ldflags: "-Lvendor/bin")]`.

##
Defined in:

annotations.cr