You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
"Using '<function>' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking"
but these don’t seem to cause any issues in practice
I think that isn't quite accurate -- you are probably just lucky and ran the compiled program on a machine that happened to have the same (or compatible) version of glibc as your build system has.
glibc is not really compatible with static linking. It loads stuff dynamically at run time and assumes to find the same glibc version as on the machine the was compiled. You'll get hard errors if that isn't the case.
Contrary to popular belief, static linking [of glibc] produces less, not more, portable executables on Linux.
To be really more portable, you have to link against a libc that doesn't force dynamic behaviour as glibc does. For example, the musl libc. That's what Alpine Linux uses, and the reason that in the paststack supported building statically linked binaries in an Alpine Docker image (but this is currently broken with the latest Alpine and GHC releases).
You may want to update the article with this info, otherwise people will get some bad surprises.
Hopefully that will also motivate more people to improve the static linking situation, e.g. by making musl work nicely to solve the issue.
The text was updated successfully, but these errors were encountered:
From https://vaibhavsagar.com/blog/2018/01/03/static-haskell-nix/
I think that isn't quite accurate -- you are probably just lucky and ran the compiled program on a machine that happened to have the same (or compatible) version of glibc as your build system has.
glibc is not really compatible with static linking. It loads stuff dynamically at run time and assumes to find the same glibc version as on the machine the was compiled. You'll get hard errors if that isn't the case.
See https://stackoverflow.com/questions/8657908/deploying-yesod-to-heroku-cant-build-statically#answer-8658468 for some details.
As it's said there:
To be really more portable, you have to link against a libc that doesn't force dynamic behaviour as glibc does. For example, the
musl
libc. That's what Alpine Linux uses, and the reason that in the paststack
supported building statically linked binaries in an Alpine Docker image (but this is currently broken with the latest Alpine and GHC releases).You may want to update the article with this info, otherwise people will get some bad surprises.
Hopefully that will also motivate more people to improve the static linking situation, e.g. by making
musl
work nicely to solve the issue.The text was updated successfully, but these errors were encountered: