Force-link netstream's rb_net_* exports via #[used] keepalives
dlopen kept failing with "cannot locate symbol rb_net_open". Root cause:
rustc's #[used] attribute doesn't propagate across rlib boundaries —
rockbox-server has its own _netstream keepalive mod, but when our cdylib
pulls rockbox-server in as an rlib, rustc dead-code-strips the entire
crate (including its keepalive trick) because nothing in our crates/expo
code directly references rockbox-server symbols.
Fix:
- Reference start_server / start_servers directly in daemon.rs (extern fn
+ #[used] static fn pointer) so rockbox-server stays alive.
- Reference rbnetstream::rb_net_{open,read,len,lseek,close} directly the
same way so the netstream rlib stays alive.
- Add `rbnetstream` (package name "netstream") as a direct optional dep
in crates/expo/Cargo.toml gated on embedded-daemon.
Result: rb_net_open / rb_net_read / etc. are now `T` (defined text) in
librockbox_expo.so instead of `U` (undefined dynamic ref).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>