Skip to main content

Crate linktime

Crate linktime 

Source
Expand description

§linktime

Cross-platform libraries for link-time initialization, finalization and collection in Rust.

Build Status

cratedocsversion
linktimedocs.rscrates.io
ctordocs.rscrates.io
dtordocs.rscrates.io
link-sectiondocs.rscrates.io

§Crates

The linktime project comprises three crates, and the top-level linktime crate aggregates them all.

Pick-and-choose, or import the top-level crate to get all three.

§ctor

Module initialization functions for Rust (like __attribute__((constructor)) in C/C++).

Run code before main to initialize data, external resources, or other state.

[dependencies]
linktime = { version = "...", features = ["ctor"] }  # note: already enabled by default
# or
ctor = "..."
use linktime::ctor; // or ctor::ctor

#[ctor(unsafe)]
fn foo() {
    println!("Life before main!");
}

§dtor

Module shutdown functions for Rust (like __attribute__((destructor))).

Run code after main to clean up resources, or perform other final operations.

[dependencies]
linktime = { version = "...", features = ["dtor"] }  # note: already enabled by default
# or
dtor = "..."
use linktime::dtor; // or dtor::dtor

#[dtor(unsafe)]
fn foo() {
    println!("Life after main!");
}

Typed and untyped link section support for Rust.

Collect related items from an entire linked binary into a single link section.

[dependencies]
linktime = { version = "...", features = ["link-section"] }  # note: already enabled by default
# or
link-section = "..."
use linktime::link_section::{section, in_section, TypedSection};
use linktime::ctor;

#[section]
static FOO: TypedSection<fn()>;

#[in_section(FOO)]
fn foo() {
    println!("Hello, world!");
}

#[ctor(unsafe)]
fn print_numbers() {
    for f in FOO {
        f();
    }
}

§Contributing

Contributions are welcome!

§License

These projects are dual-licensed under the Apache License, Version 2.0 and the MIT License.

Modules§

declarative
Declarative forms of linktime macros.
link_section
Typed and untyped link section support for Rust.

Attribute Macros§

ctor
Define an initializer function that runs before main. See ctor.
dtor