Hacker News new | past | comments | ask | show | jobs | submit login

  > Right now, we depend on glibc, and it cannot be statically linked.
Could you expand on this? Why can it not be statically linked?



Name resolution libraries are loaded dynamically [1,2], so glibc can't be linked statically if you want NSS to work. I gather there might be a way to explicitly link to a specific resolution library but this is practically unsupported/poorly documented.

[1]: https://sourceware.org/glibc/wiki/FAQ#Even_statically_linked...

[2]: http://stackoverflow.com/questions/3430400/linux-static-link...


I understand this limitation. I can currently get around this by using --enable-static-nss.

Does rust currently expose any way to do this? Could I perform linking myself as a workaround?


> Could I perform linking myself as a workaround?

You can but it requires lots of black magic, and certainly a nightly rather than beta Rust ;)

http://mainisusuallyafunction.blogspot.com/2015/01/151-byte-... is an old blog post that can get you started.


Wonderful -- thanks Steve! Best of luck on the upcoming release.


It's generally considered a poor idea to statically link glibc, but if you don't rely on certain features, you can do it. For example, NSS won't work unless you add a bunch of flags for other libraries you specifically use, see https://sourceware.org/glibc/wiki/FAQ#Even_statically_linked...

Most people who focus on 100% statically linking just use a different libc. For example, Stali Linux, [1] has this to say: http://sta.li/faq

> it [is] nearly impossible to use glibc for static linking in non-trivial programs.

That said, if you want to give it a shot, it's technically possible, though we don't expose it for Rust yet, due to these kinds of landmines.

1: which got linked here a few times, most recently https://news.ycombinator.com/item?id=7261559


I'm looking forward to using rust in a constrained embedded environment where I control 100% of the software. I don't have to worry about such problems.


Awesome, then yes, you have several advantages here :) You'll be using nightly Rust for a while, as several features that target this use case are still unstable, like inline assembly. But it's a use case we do care a lot about.


Most of the people I've seen targeting this use case stub out their own stdlib, although that obviously gets cumbersome the more stuff you want to do.


If you statically link libc, and then another library you use (potentially transitively) dlopen(3)s a library, you are going to have a bad time.


Of course, but that doesn't mean we shouldn't have the option, right?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: