mailing list of musl libc
 help / color / mirror / code / Atom feed
* [musl] building statically linked DSOs with musl
@ 2022-01-01  9:32 Sebastien Bourdeauducq
  2022-01-01 12:56 ` Joakim Sindholt
  0 siblings, 1 reply; 7+ messages in thread
From: Sebastien Bourdeauducq @ 2022-01-01  9:32 UTC (permalink / raw)
  To: musl

Dear musl libc developers,

I'm trying to build a shared library that is itself statically linked.
The reason for doing that is building a Python plug-in, which contains 
complex dependencies such as LLVM, and which should use a custom malloc 
everywhere. Dynamic linking doesn't work in my case as the malloc & co 
symbols are already resolved by Python when my plugin is loaded, and 
replacing all malloc & co calls in LLVM, libstdc++, etc. with a 
differently named function seems pretty difficult.

Naturally I've come to musl libc, since glibc comes with a bunch of 
nonsense when attempting to link against it statically.

For simple code this goes reasonably well:
$ nix-shell -p pkgsMusl.clang_13
$ cat staticlib.c
#include <stdio.h>

void test_func() {
	puts("hello world");
}

$ clang -o libstaticlib.so -shared staticlib.c -fPIC -Wl,-Bstatic -lc
$ ldd libstaticlib.so
	statically linked

The "test" program below is built with and linked against glibc, as 
would be the case in my Python plugin situation.

$ nix-shell -p clang_13
$ cat test.c
#include <stdio.h>

void test_func();

int main() {
	test_func();
	return 0;
}
$ clang -o test -L. -lstaticlib test.c
$ ldd test
	linux-vdso.so.1 (0x00007ffd4db5a000)
	libstaticlib.so => not found
	libc.so.6 => 
/nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib/libc.so.6 
(0x00007fbb29746000)
	/nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib/ld-linux-x86-64.so.2 => /nix/store/vjq3q7dq8vmc13c3py97v27qwizvq7fd-glibc-2.33-59/lib64/ld-linux-x86-64.so.2 (0x00007fbb2990d000)
$ LD_LIBRARY_PATH=. ./test
hello world

So far, so good. But trouble begins when calling certain musl functions 
from the library:
$ cat staticlib.c
#include <stdio.h>
#include <sys/time.h>

void test_func() {
	struct timeval tv;
	gettimeofday(&tv, NULL);
	printf("%ld", tv.tv_sec);
}
$ clang -o libstaticlib.so -shared staticlib.c -fPIC -Wl,-Bstatic -lc
$ LD_LIBRARY_PATH=. ./test
Segmentation fault (core dumped)

(gdb) backtrace
#0  0x00007ffff7fbf527 in __vdsosym () from ./libstaticlib.so
#1  0x00007ffff7fbf439 in cgt_init () from ./libstaticlib.so
#2  0x00007ffff7fbf47d in clock_gettime () from ./libstaticlib.so
#3  0x00007ffff7fbedba in gettimeofday () from ./libstaticlib.so
#4  0x00007ffff7fbd2c5 in test_func () from ./libstaticlib.so
#5  0x0000000000401138 in main ()

Has anyone encountered this and would have an explanation or fix?

Thanks,
Sébastien


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-01-03  7:05 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-01  9:32 [musl] building statically linked DSOs with musl Sebastien Bourdeauducq
2022-01-01 12:56 ` Joakim Sindholt
2022-01-01 13:58   ` Alex Xu (Hello71)
2022-01-01 14:31     ` Sebastien Bourdeauducq
2022-01-02 21:41       ` Markus Wichmann
2022-01-03  1:37   ` Sebastien Bourdeauducq
2022-01-03  7:05     ` Markus Wichmann

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).