mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Szabolcs Nagy <nsz@port70.net>
To: musl@lists.openwall.com
Subject: Re: static build and dlopen
Date: Wed, 27 Aug 2014 17:27:36 +0200	[thread overview]
Message-ID: <20140827152735.GB22308@port70.net> (raw)
In-Reply-To: <CAKfGGh16bu6Lhc+EF0d1EiNzhs4V0LxShA3iiw-z50NwbfNQPw@mail.gmail.com>

* piranna@gmail.com <piranna@gmail.com> [2014-08-27 16:14:07 +0200]:
...
> thought libuv is calling to the system dlopen() function, it's said,
> the musl stub for static builds, making it impossible to load the
> Node.js compiled modules :-(

dlopen does not work from a statically linked binary

(it can be made to work but it's more complicated than it seems:
the entire libc should be linked into the application so all
interfaces are present a loaded module may require which partly
defeats the purpose of static linking and there are toolchain
issues with this so it is not implemented)

> So I ask, does the dlopen() stub really makes sense (the linker is
> intelligent enought to remove unused code on static builds...)? Is
> there any alternative I can do? Is there a flag to allow to use the
> real dlopen() function on static builds, or could it be possible to
> add it? If not, could I be able to use an external dlopen library (and
> could I be able to integrate it easily)?
> 

if the loaded modules depend on the libc api (or transitively any
external dependency) then naive dlopen cannot work with static
linking and there is no way around this

(btw the same applies to all module systems that can load libraries
written in c, eg. if you tried a statically linked python you would
have the same issue: it works if all dependencies are linked in, it
fails if you load libraries at runtime)

> Oh, and if you are thinking about it: yes, this is a farily similar
> use case as when compiling OS kernels (at least hybrid ones, like
> Linux) where you need to compile them statically so it can boot and
> also has support to load compiled modules on runtime, since in this
> case, Node.js is in fact the "kernel" and Linux is just a somewhat HAL
> layer :-P

neither the kernel nor the loaded kernel modules depend on the libc


  reply	other threads:[~2014-08-27 15:27 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-27 14:14 piranna
2014-08-27 15:27 ` Szabolcs Nagy [this message]
2014-08-27 17:01   ` piranna
2014-08-27 17:20     ` Justin Cormack
2014-08-27 20:07       ` piranna
2014-08-27 16:43 ` Rich Felker
2014-08-27 17:10   ` piranna
2014-08-27 18:48     ` Laurent Bercot
2014-08-27 20:19       ` piranna
2014-08-27 20:51         ` Rich Felker
2014-08-27 20:59         ` Laurent Bercot
2014-08-27 21:04           ` Rich Felker
2014-08-27 22:54           ` Kurt H Maier
2014-08-27 23:24             ` Laurent Bercot
2014-08-27 23:36               ` Brent Cook
2014-09-01 23:38                 ` piranna
2014-09-02  0:38                   ` Rich Felker
2014-09-02  0:49                     ` piranna

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140827152735.GB22308@port70.net \
    --to=nsz@port70.net \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).