Running a .NET executable in a Python environment

Bug description:
I’m trying to run a .NET linux executable in a Python environment, but I either get: version 'GLIBC_2.33' not found (required by /nix/store/mdck89nsfisflwjv6xv8ydj7dj0sj2pn-gcc-11.3.0-lib/lib/libstdc++.so.6) or symbol lookup error: /nix/store/4nlgxhb09sdr51nc9hdm8az5b08vzkgx-glibc-2.35-163/lib/libc.so.6: undefined symbol: _dl_fatal_printf, version GLIBC_PRIVATE

Expected vs Current Behavior:
Expected: Python environment should successfully open the .NET executable
Current: version 'GLIBC_2.33' not found (required by /nix/store/mdck89nsfisflwjv6xv8ydj7dj0sj2pn-gcc-11.3.0-lib/lib/libstdc++.so.6) or symbol lookup error: /nix/store/4nlgxhb09sdr51nc9hdm8az5b08vzkgx-glibc-2.35-163/lib/libc.so.6: undefined symbol: _dl_fatal_printf, version GLIBC_PRIVATE

Steps to reproduce:
Create and compile/publish a .NET linux app, self-contained or not, publish to a python environment, open the shell, try to run the executable

Bug appears at this link: https://replit.com/@testperson24/EminentSufficientPrinter#server.py

Replit Profile: https://replit.com/@testperson24

1 Like

After building the .NET app with these settings (PublishSingleFile, PublishTrimmed, PlatformTarget, TargetFramework), I’ve managed to get a consistent symbol lookup error: /nix/store/4nlgxhb09sdr51nc9hdm8az5b08vzkgx-glibc-2.35-163/lib/libc.so.6: undefined symbol: _dl_fatal_printf, version GLIBC_PRIVATE which is way better than before, I guess.

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PlatformTarget>x64</PlatformTarget>
    <PublishSingleFile>true</PublishSingleFile>
    <PublishTrimmed>true</PublishTrimmed>
  </PropertyGroup>

CMD: dotnet publish --os linux --self-contained

EDIT: Also had to add this to replit.nix to get this output ^

deps = [
      pkgs.clang_12
      pkgs.ccls
      pkgs.gdb
      pkgs.gnumake
      pkgs.glibc
]
1 Like

Is this for Windows? Replit runs on Linux and so Windows-specific program will not run properly (if at all). The OS your device runs is irrelevant as the code is running on Replit’s server.

2 Likes

No, I’m compiling this onto Linux, from my Windows machine.

1 Like

Update: I’ve managed to get the app to run in the SHELL, but not using subprocess.run/subprocess.Popen, even though i’m running the exact same command, in shell:

~/EminentSufficientPrinter$ dotnet/dotnet "chatter/chatter.dll" IP PORT UUID
[15:53:21] Received data: start
#^ this is from my app

from python env:

/home/runner/EminentSufficientPrinter/dotnet/dotnet: symbol lookup error: /nix/store/4nlgxhb09sdr51nc9hdm8az5b08vzkgx-glibc-2.35-163/lib/libc.so.6: undefined symbol: _dl_fatal_printf, version GLIBC_PRIVATE

dotnet build info:
command line command: dotnet publish -c Release --os linux --self-contained true
.csproj file:

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PlatformTarget>x64</PlatformTarget>
    <InvariantGlobalization>true</InvariantGlobalization>
  </PropertyGroup>