Reputation: 1676
How can I generate completely static binaries with clang? I have used the following command:
clang -flto <source files> -o <executable output> -fuse-ld=lld -static-libgcc -lc -Bstatic -m32
And yet, the generated output depends on a certain .so
file:
$ ldd <executable output file>
linux-gate.so.1 => (0xf77dd000)
libc.so.6 => /lib/libc.so.6 (0xf75f0000)
/lib/ld-linux.so.2 (0x5663b000)
The following answer tries to answer the question but doesn't directly address the problem.
Is it even possible, to generate completely independent binaries? Or should I have resort to using other different C library implementations other than libgcc
?
If yes, then how do I link it with clang if I have the source code, of for example newlib
?
Upvotes: 8
Views: 20008
Reputation: 188
If you, like me, got here expecting Darwin would behave somewhat similarly to Linux, that unfortunately isn't the case
Apple fully supports static libraries; if you want to create one, just start with the appropriate Xcode project or target template.
Apple does not support statically linked binaries on Mac OS X. A statically linked binary assumes binary compatibility at the kernel system call interface, and we do not make any guarantees on that front. Rather, we strive to ensure binary compatibility in each dynamically linked system library and framework.
Upvotes: 2
Reputation: 705
Just compile it using the clang's -static flag.
On your case, try:
clang -flto <source files> -o <executable output> -static -m32
The results on my test program show:
[root@interserver ogrerobot.com]# ldd ./CppUtilsSpikes
not a dynamic executable
Upvotes: 7