Skip to content

lgztx96/avalonia-linux-static-example

Repository files navigation

Avalonia Linux Static Linked App Example

This project demonstrates how to statically compile an Avalonia application on Alpine Linux.


🛠️ Environment Preparation

Please install the following dependencies first:

apk add dotnet9-sdk build-base clang cmake
apk add freetype-static fontconfig-static expat-static bzip2-static libx11-static libxcb-static libxdmcp-dev libxau-dev libsm-dev libice-static icu-static icu-dev openssl-dev openssl-libs-static

⚙️ Configure csproj

Add the following content to your csproj file:

<ItemGroup Condition="'$(RuntimeIdentifier)' == 'linux-musl-x64'">
    <DirectPInvoke Include="libc" />
    <DirectPInvoke Include="libSkiaSharp" />
    <NativeLibrary Include="runtimes\linux-x64\native\libSkiaSharp.a" /> <!-- Adjust the path as needed -->
    <DirectPInvoke Include="libHarfBuzzSharp" />
    <NativeLibrary Include="runtimes\linux-x64\native\libHarfBuzzSharp.a" /> <!-- Adjust the path as needed -->
    <DirectPInvoke Include="libX11.so.6" />
    <NativeLibrary Include="/usr/lib/libX11.a" />
    <NativeLibrary Include="/usr/lib/libxcb.a" />
    <NativeLibrary Include="/usr/lib/libxcb-composite.a" />
    <NativeLibrary Include="/usr/lib/libxcb-damage.a" />
    <NativeLibrary Include="/usr/lib/libxcb-dbe.a" />
    <NativeLibrary Include="/usr/lib/libxcb-dpms.a" />
    <NativeLibrary Include="/usr/lib/libxcb-dri2.a" />
    <NativeLibrary Include="/usr/lib/libxcb-dri3.a" />
    <NativeLibrary Include="/usr/lib/libxcb-glx.a" />
    <NativeLibrary Include="/usr/lib/libxcb-present.a" />
    <NativeLibrary Include="/usr/lib/libxcb-randr.a" />
    <NativeLibrary Include="/usr/lib/libxcb-record.a" />
    <NativeLibrary Include="/usr/lib/libxcb-render.a" />
    <NativeLibrary Include="/usr/lib/libxcb-res.a" />
    <NativeLibrary Include="/usr/lib/libxcb-screensaver.a" />
    <NativeLibrary Include="/usr/lib/libxcb-shape.a" />
    <NativeLibrary Include="/usr/lib/libxcb-shm.a" />
    <NativeLibrary Include="/usr/lib/libxcb-sync.a" />
    <NativeLibrary Include="/usr/lib/libxcb-xf86dri.a" />
    <NativeLibrary Include="/usr/lib/libxcb-xfixes.a" />
    <NativeLibrary Include="/usr/lib/libxcb-xinerama.a" />
    <NativeLibrary Include="/usr/lib/libxcb-xinput.a" />
    <NativeLibrary Include="/usr/lib/libxcb-xkb.a" />
    <NativeLibrary Include="/usr/lib/libxcb-xtest.a" />
    <NativeLibrary Include="/usr/lib/libxcb-xv.a" />
    <NativeLibrary Include="/usr/lib/libxcb-xvmc.a" />
    <NativeLibrary Include="/usr/lib/libXau.a" />
    <NativeLibrary Include="/usr/lib/libXdmcp.a" />
    <DirectPInvoke Include="libSM.so.6" />
    <NativeLibrary Include="/usr/lib/libSM.a" />
    <DirectPInvoke Include="libICE.so.6" />
    <NativeLibrary Include="/usr/lib/libICE.a" />
    <NativeLibrary Include="/usr/lib/libfontconfig.a" />
    <NativeLibrary Include="/usr/lib/libfreetype.a" />
    <NativeLibrary Include="/usr/lib/libexpat.a" />
    <NativeLibrary Include="/usr/lib/libbz2.a" />
</ItemGroup>

Publish the Project

dotnet publish -p:PublishAot=true -p:StaticOpenSslLinking=true -p:StaticExecutable=true -p:StaticICULinking=true

You can use the preview version of the Microsoft.DotNet.ILCompiler NuGet package with option -p:EmbedIcuDataPath=/usr/share/icu/74.2/icudt74l.dat (see docs).

If you do not need ICU, you can use -p:InvariantGlobalization=true.

How to Run the Sample?

Extract SampleBrowser.Desktop.7z or Semi.Avalonia.Demo.Desktop.7z.

Extract icudt74l.7z and copy it to /usr/share/icu/74.2/icudt74l.dat (I did not use the EmbedIcuDataPath option).

Run the sample application.

SampleBrowser.Desktop

Snipaste_2025-05-28_23-03-40

Semi.Avalonia.Demo.Desktop

Snipaste_2025-05-28_23-04-52

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published