This example project demonstrates the dynamic linkage behavior of override static variable in some situation:
cargo run
Calling some_staticlib::get_global_direct()
[some_staticlib/src/lib.rs:5] p_global_var = 0x00007f977c43695c
Calling some_dy::get_global_var_from_dy)
[some_staticlib/src/lib.rs:11] p_global_var = 0x00007f977b1c16c0
Calling some_dy::cget_global_var_direct)
[some_staticlib/src/lib.rs:5] p_global_var = 0x00007f977c43695c
Lines 22 to 55 in 98e399a
Lines 1 to 9 in 98e399a
In src/main.rs:
- call
some_staticlib::get_global_direct()
(static linkage) - call
some_dy::get_global_var_from_dy
(dynamic linkgage)- in some_dy , call
some_staticlib::get_global_var_from_dy()
(static linkage with some_dy)
- in some_dy , call
- call
some_dy::get_global_var_direct
(dynamic linkgage)- in some_dy , call
some_staticlib::get_global_var_direct()
(static linkage with some_dy)
- in some_dy , call
Note that although some_dy::get_global_var_from_dy
and some_dy::get_global_var_direct
are wrapped in dynamic library, the dynamic linker is smart enough to know that the underneath some_staticlib::get_global_var_direct()
can be shared.