Cross-compiling a static binary from GitHub Actions

Vladimir Panteleev thecybershadow.lists at gmail.com
Sat Sep 25 16:23:09 UTC 2021


On Saturday, 25 September 2021 at 16:12:52 UTC, kinke wrote:
> On Saturday, 25 September 2021 at 07:59:08 UTC, Vladimir 
> Panteleev wrote:
>> (I managed to build a static binary for x86_64.)
>
> Linked statically against glibc? I thought that's not really 
> possible, and one would need to resort to another libc like 
> musl for fully statically linked binaries. Could you link to 
> the repo of the tool?

Sure:

https://github.com/CyberShadow/btdu

And here is the script I use to link the x86_64 binary:

https://gist.github.com/CyberShadow/df49946888ad1ea683729f57c5e59d8a

During linking I see warnings such as:

     warning: Using 'getaddrinfo' in statically linked 
applications requires at runtime the shared libraries from the 
glibc version used for linking

but I haven't paid them mind because the application is not using 
networking (or at least name resolution).

ldd says "not a dynamic executable", so I guess that makes it 
fully static?

> That said, linking dynamically against a rather old glibc seems 
> to work in many cases. The official LDC binaries do that and 
> are built on Ubuntu 18.04 for that reason; they seem to work on 
> most distros, excl. musl-only Alpine. So I'd expect 
> cross-compiling on Ubuntu 18 and using its cross-gcc toolchain 
> to work for most people.

My understanding is that you can't really pick-and-choose which 
libraries you want to link statically vs. dynamically (or at 
least, the toolchain didn't let me). I also depend on libncurses, 
which has broken its ABI in the past, so I would like to avoid 
that dependency if possible for the stand-alone binary.

> Another (potentially more flexible) option could be using 
> Travis for native AArch64 compilation - again, that's what LDC 
> does 
> (https://github.com/ldc-developers/ldc/blob/master/.travis.yml). They have a Ubuntu 18.04 image, and the D integration still works, on AArch64 too. Their AArch64 service is sponsored by ARM and doesn't cost any credits for public open-source projects.

That's interesting, thanks - though I'm not sure why it would be 
considered more flexible, as it would create a rather strong 
dependency on a third-party service with a tumultuous track 
record :)



More information about the digitalmars-d-ldc mailing list