Skip to content

Is it possible to remove unused native dll references from the published executable? #45682

@JeroenVandezande

Description

@JeroenVandezande

When I compile this code as a DotNet5 Linux Arm64 exe:

using System;

namespace VarisciteTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World5!");
        }
    }
}

I cannot run it because of a missing .so file.

These are the Publish Settings:

  • Debug
  • net5.0
  • Self-contained
  • linux-arm64
  • Produce single file
  • Trim unused assemblies

This is the error:
'./VarisciteTest: error while loading shared libraries: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory'

If I look at the executable file with LDD I get this:

root@imx8mm-var-dart:~/test# ldd VarisciteTest
        linux-vdso.so.1 (0x0000ffff8b787000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x0000ffff8add8000)
        libdl.so.2 => /lib/libdl.so.2 (0x0000ffff8adc4000)
        libz.so.1 => /lib/libz.so.1 (0x0000ffff8ad9d000)
        libgssapi_krb5.so.2 => not found
        librt.so.1 => /lib/librt.so.1 (0x0000ffff8ad85000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0000ffff8aba5000)
        libm.so.6 => /lib/libm.so.6 (0x0000ffff8aafb000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0000ffff8aad6000)
        libc.so.6 => /lib/libc.so.6 (0x0000ffff8a96a000)
        /lib/ld-linux-aarch64.so.1 (0x0000ffff8b758000)

If I do the same but change target framework to .NET Core 3.1 it works fine...
This is the LDD output from the .NET Core 3.1 Executable:

root@imx8mm-var-dart:~/test# ./VarisciteTest 
Hello World5!
root@imx8mm-var-dart:~/test# ldd VarisciteTest
        linux-vdso.so.1 (0x0000ffff863a7000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x0000ffff86348000)
        libdl.so.2 => /lib/libdl.so.2 (0x0000ffff86334000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0000ffff86154000)
        libm.so.6 => /lib/libm.so.6 (0x0000ffff860aa000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0000ffff86085000)
        libc.so.6 => /lib/libc.so.6 (0x0000ffff85f19000)
        /lib/ld-linux-aarch64.so.1 (0x0000ffff86378000) 

edit: possibly related to this older case: dotnet/corert#6191

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    No status

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions