ikvmnet / ikvm

A Java Virtual Machine and Bytecode-to-IL Converter for .NET
Other
1.19k stars 111 forks source link

Exception: Could not load ikvm native library. #556

Closed lytico closed 1 month ago

lytico commented 1 month ago

Version: "IKVM" "8.9.0"

Linux Mint 21.3 Cinnamon
Kernel 6.5.0-41-generic
Processor AMD Ryzen 

everything compiles fine, programm is starting, but calling plantuml.dll it crashes

Exception in thread "Thread-1" java.lang.ExceptionInInitializerError: IKVM.Runtime.InternalException: Could not load ikvm native library.
   at IKVM.Runtime.LibIkvm..ctor()
   at IKVM.Runtime.LibIkvm..cctor()
    at IKVM.Java.Externs.java.lang.UNIXProcess.init(Unknown Source)
    at java.lang.UNIXProcess.init(Native Method)
    at java.lang.UNIXProcess.<clinit>(UNIXProcess.java:493)

csproj-file (partly):

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
    </PropertyGroup>
    <PropertyGroup>
        <RootNamespace>Limaki</RootNamespace>
        <OutputType>Exe</OutputType>
        <StartupObject>Limaki.DocumentModel.PlantUml.Runner.Program</StartupObject>
    </PropertyGroup>
    ....
    <ItemGroup>
        <PackageReference Include="IKVM" Version="8.9.0" />
        <IkvmReference Include="..\3rdParty\PlantUml\plantuml.1.2021.4.jar">
            <AssemblyName>plantuml</AssemblyName>
            <AssemblyVersion>2.5.1</AssemblyVersion>
            <AssemblyFileVersion>2.5.1</AssemblyFileVersion>
        </IkvmReference>
    </ItemGroup>

the output folder contains ... /bin/Release/net8.0/runtimes/linux-x64/native/libikvm.so

wasabii commented 1 month ago

Oh, darn. Well, that looks correct.....

Is there an appropropriate .deps.json generated along with it?

lytico commented 1 month ago

yes, i think so ...

Limaki.UnitsOfWork.DocumentModel.PlantUml.Runner.deps.json

wasabii commented 1 month ago

Can you run ldd against libikvm.so?

lytico commented 1 month ago

ldd libikvm.so


    linux-vdso.so.1 (0x00007ffcb1b73000)libmd.so.0 (0x000072beda8b3000)
    /usr/local/lib/AppProtection/libAppProtection.so (0x00007de9aac00000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007de9aa800000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007de9aaf48000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007de9aaf43000)
    /lib64/ld-linux-x86-64.so.2 (0x00007de9aaf71000)
    libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007de9aaac0000)
    libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007de9aaf17000)
    libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x00007de9aaf03000)
    libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007de9aa400000)
    libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007de9aaefd000)
    libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007de9aaef5000)
    libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007de9aaede000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007de9aa719000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007de9aaebe000)
    libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007de9aaea6000)
    libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007de9aae99000)
lytico commented 1 month ago

plantuml.dll decompiled:


using IKVM.Attributes;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;

// Assembly plantuml, Version=2.5.1.0, Culture=neutral, PublicKeyToken=13235d27fcbfff58
// MVID: DAA6B414-330B-4A1C-8F01-705E8F1677C8
// Assembly references:
// IKVM.Runtime, Version=8.9.0.0, Culture=neutral, PublicKeyToken=13235d27fcbfff58
// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// IKVM.Java, Version=8.9.0.0, Culture=neutral, PublicKeyToken=13235d27fcbfff58
// System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.DisableOptimizations)]
[assembly: InternalsVisibleTo("plantuml-ikvm-runtime-injected")]
[assembly: AssemblyFileVersion("2.5.1.0")]
[assembly: AssemblyVersion("2.5.1.0")]

[module: SourceFile(null)]
[module: PackageList("plantuml.1.2021.4.jar", new string[] {"ext.plantuml.com.ctreber.acearth", "ext.plantuml.com.ctreber.acearth.renderer", "ext.plantuml.com.ctreber.acearth.gui", "ext.plantuml.com.ctreber.acearth.plugins", "ext.plantuml.com.ctreber.acearth.plugins.markers", "ext.plantuml.com.ctreber.acearth.projection", "ext.plantuml.com.ctreber.acearth.scanbit", "ext.plantuml.com.ctreber.acearth.scandot", "ext.plantuml.com.ctreber.acearth.shader", "ext.plantuml.com.ctreber.acearth.util", "ext.plantuml.com.ctreber.aclib.gui", "ext.plantuml.com.ctreber.aclib.sort", "ext.plantuml.com.google.zxing", "ext.plantuml.com.google.zxing.client.j2se", "ext.plantuml.com.google.zxing.common", "ext.plantuml.com.google.zxing.common.reedsolomon", "ext.plantuml.com.google.zxing.datamatrix.decoder", "ext.plantuml.com.google.zxing.qrcode", "ext.plantuml.com.google.zxing.qrcode.decoder", "ext.plantuml.com.google.zxing.qrcode.encoder", "gen.annotation", "gen.lib.cdt", "smetana.core", "gen.lib.cgraph", "gen.lib.common", "gen.lib.dotgen", "gen.lib.gvc", "gen.lib.label", "gen.lib.pack", "gen.lib.pathplan", "gen.plugin.dot_layout", "h", "jcckit.plot", "jcckit", "jcckit.data", "jcckit.util", "jcckit.graphic", "jcckit.renderer", "jcckit.transformation", "net.sourceforge.plantuml", "net.sourceforge.plantuml.core", "net.sourceforge.plantuml.graphic", "net.sourceforge.plantuml.ugraphic", "net.sourceforge.plantuml.svek", "net.sourceforge.plantuml.preproc2", "net.sourceforge.plantuml.creole.atom", "net.sourceforge.plantuml.acearth", "net.sourceforge.plantuml.api", "net.sourceforge.plantuml.command", "net.sourceforge.plantuml.activitydiagram3", "net.sourceforge.plantuml.activitydiagram3.ftile", "net.sourceforge.plantuml.activitydiagram3.command", "net.sourceforge.plantuml.creole", "net.sourceforge.plantuml.activitydiagram3.ftile.vertical", "net.sourceforge.plantuml.style", "net.sourceforge.plantuml.activitydiagram3.ftile.vcompact", "net.sourceforge.plantuml.activitydiagram3.ftile.vcompact.cond", "net.sourceforge.plantuml.cucadiagram", "net.sourceforge.plantuml.activitydiagram", "net.sourceforge.plantuml.activitydiagram.command", "net.sourceforge.plantuml.anim", "net.sourceforge.plantuml.ant", "net.sourceforge.plantuml.api.mda.option2", "net.sourceforge.plantuml.api.mda.option3", "net.sourceforge.plantuml.skin", "net.sourceforge.plantuml.asciiart", "net.sourceforge.plantuml.skin.rose", "net.sourceforge.plantuml.board", "net.sourceforge.plantuml.bpm", "net.sourceforge.plantuml.braille", "net.sourceforge.plantuml.brotli", "net.sourceforge.plantuml.classdiagram", "net.sourceforge.plantuml.objectdiagram", "net.sourceforge.plantuml.classdiagram.command", "net.sourceforge.plantuml.code", "net.sourceforge.plantuml.code.deflate", "net.sourceforge.plantuml.command.note", "net.sourceforge.plantuml.command.note.sequence", "net.sourceforge.plantuml.command.regex", "net.sourceforge.plantuml.compositediagram", "net.sourceforge.plantuml.compositediagram.command", "net.sourceforge.plantuml.creole.command", "net.sourceforge.plantuml.creole.legacy", "net.sourceforge.plantuml.creole.rosetta", "net.sourceforge.plantuml.cucadiagram.dot", "net.sourceforge.plantuml.cucadiagram.entity", "net.sourceforge.plantuml.dedication", "net.sourceforge.plantuml.definition", "net.sourceforge.plantuml.descdiagram", "net.sourceforge.plantuml.descdiagram.command", "net.sourceforge.plantuml.directdot", "net.sourceforge.plantuml.ditaa", "net.sourceforge.plantuml.donors", "net.sourceforge.plantuml.eggs", "net.sourceforge.plantuml.eps", "net.sourceforge.plantuml.error", "net.sourceforge.plantuml.evalex", "net.sourceforge.plantuml.flashcode", "net.sourceforge.plantuml.flowdiagram", "net.sourceforge.plantuml.font", "net.sourceforge.plantuml.ftp", "net.sourceforge.plantuml.fun", "net.sourceforge.plantuml.geom", "net.sourceforge.plantuml.geom.kinetic", "net.sourceforge.plantuml.gitlog", "net.sourceforge.plantuml.golem", "net.sourceforge.plantuml.graph2", "net.sourceforge.plantuml.graph", "net.sourceforge.plantuml.graphic.color", "net.sourceforge.plantuml.hector2", "net.sourceforge.plantuml.hector2.continuity", "net.sourceforge.plantuml.hector2.graphic", "net.sourceforge.plantuml.hector2.layering", "net.sourceforge.plantuml.hector2.mpos", "net.sourceforge.plantuml.hector", "net.sourceforge.plantuml.help", "net.sourceforge.plantuml.html", "net.sourceforge.plantuml.jasic", "net.sourceforge.plantuml.jcckit", "net.sourceforge.plantuml.json", "net.sourceforge.plantuml.jsondiagram", "net.sourceforge.plantuml.logo", "net.sourceforge.plantuml.math", "net.sourceforge.plantuml.mda", "net.sourceforge.plantuml.mindmap", "net.sourceforge.plantuml.mjpeg", "net.sourceforge.plantuml.nwdiag", "net.sourceforge.plantuml.objectdiagram.command", "net.sourceforge.plantuml.openiconic", "net.sourceforge.plantuml.openiconic.data", "net.sourceforge.plantuml.oregon", "net.sourceforge.plantuml.pdf", "net.sourceforge.plantuml.picoweb", "net.sourceforge.plantuml.png", "net.sourceforge.plantuml.posimo", "net.sourceforge.plantuml.preproc", "net.sourceforge.plantuml.project", "net.sourceforge.plantuml.project.core3", "net.sourceforge.plantuml.project.command", "net.sourceforge.plantuml.project.core", "net.sourceforge.plantuml.project.draw", "net.sourceforge.plantuml.project.lang", "net.sourceforge.plantuml.project.solver", "net.sourceforge.plantuml.project.time", "net.sourceforge.plantuml.project.timescale", "net.sourceforge.plantuml.real", "net.sourceforge.plantuml.salt", "net.sourceforge.plantuml.salt.element", "net.sourceforge.plantuml.salt.factory", "net.sourceforge.plantuml.sdot", "net.sourceforge.plantuml.security", "net.sourceforge.plantuml.sequencediagram", "net.sourceforge.plantuml.sequencediagram.command", "net.sourceforge.plantuml.sequencediagram.graphic", "net.sourceforge.plantuml.sequencediagram.puma", "net.sourceforge.plantuml.sequencediagram.teoz", "net.sourceforge.plantuml.sprite", "net.sourceforge.plantuml.statediagram", "net.sourceforge.plantuml.statediagram.command", "net.sourceforge.plantuml.stats", "net.sourceforge.plantuml.stats.api", "net.sourceforge.plantuml.sudoku", "net.sourceforge.plantuml.svek.extremity", "net.sourceforge.plantuml.svek.image", "net.sourceforge.plantuml.svg", "net.sourceforge.plantuml.swing", "net.sourceforge.plantuml.syntax", "net.sourceforge.plantuml.telnet", "net.sourceforge.plantuml.text", "net.sourceforge.plantuml.tikz", "net.sourceforge.plantuml.tim", "net.sourceforge.plantuml.tim.expression", "net.sourceforge.plantuml.tim.iterator", "net.sourceforge.plantuml.tim.stdlib", "net.sourceforge.plantuml.timingdiagram", "net.sourceforge.plantuml.timingdiagram.command", "net.sourceforge.plantuml.timingdiagram.graphic", "net.sourceforge.plantuml.ugraphic.arc", "net.sourceforge.plantuml.ugraphic.color", "net.sourceforge.plantuml.ugraphic.comp", "net.sourceforge.plantuml.ugraphic.debug", "net.sourceforge.plantuml.ugraphic.eps", "net.sourceforge.plantuml.ugraphic.g2d", "net.sourceforge.plantuml.ugraphic.hand", "net.sourceforge.plantuml.ugraphic.html5", "net.sourceforge.plantuml.ugraphic.svg", "net.sourceforge.plantuml.ugraphic.tikz", "net.sourceforge.plantuml.ugraphic.txt", "net.sourceforge.plantuml.ugraphic.visio", "net.sourceforge.plantuml.utils", "net.sourceforge.plantuml.version", "net.sourceforge.plantuml.vizjs", "net.sourceforge.plantuml.wbs", "net.sourceforge.plantuml.webp", "net.sourceforge.plantuml.windowsdot", "net.sourceforge.plantuml.wire", "net.sourceforge.plantuml.xmi", "net.sourceforge.plantuml.xmlsc", "net.sourceforge.plantuml.yaml", "net.sourceforge.plantuml.zopfli", "org.stathissideris.ascii2image.core", "org.stathissideris.ascii2image.graphics", "org.stathissideris.ascii2image.text", "smetana.core.debug"})]
[module: JavaModule(Jars = new string[] {"plantuml.1.2021.4.jar"})]
wasabii commented 1 month ago

Can you try to set the env variable IKVM_LIBRARY_PATH to the runtimes/linux-x64/native path in the output?

Just to verify it loads it that way.

This is a bug. I have it reproducing on my end. Somehow NativeLibrary isn't loading from .deps.json like it should.

wasabii commented 1 month ago

Got it. Will release patch .... by tomorrow.

lytico commented 1 month ago

thanks for the fast patch!

it's working now with the .csproj given as example above

info

i updated to the latest version of plantuml 1.2024.6, and it works fine too - just in case you'll ever asked for ikvm - plantuml-compatibility like in this issue #466