dlemstra / Magick.NET

The .NET library for ImageMagick
Apache License 2.0
3.48k stars 415 forks source link

Crash on linux if the system libglib is loaded before Magic.Net gets called #1541

Open tri-bao opened 9 months ago

tri-bao commented 9 months ago

Magick.NET version

Magick.NET-Q16-AnyCPU 12.1.0

Environment (Operating system, version and so on)

.netcore 6 on ubuntu 22.04 docker container

Description

(process:1): GLib-GObject-WARNING **: 03:35:20.257: cannot register existing type 'gchar'
**
GLib-GObject:ERROR:../gobject/gvaluetypes.c:455:_g_value_types_init: assertion failed: (type == G_TYPE_CHAR)
Bail out! GLib-GObject:ERROR:../gobject/gvaluetypes.c:455:_g_value_types_init: assertion failed: (type == G_TYPE_CHAR)

The error is similar to the following tickets:

That happens when, within the same process, the system glib is loaded before Magick.NET

Glib is built with -Bsymbolic-functions linker flag https://docs.gtk.org/glib/building.html#extra-configuration-options Should Magick.Net be built with the same flag to avoid this error?

Steps to Reproduce

Program.cs

using ImageMagick;

using var image = new MagickImage();
LD_PRELOAD=/lib/x86_64-linux-gnu/libgobject-2.0.so.0 dotnet Test.dll

This error happens

dlemstra commented 9 months ago

Thanks for providing more info but that could have been added to that other issue. Can you create a small project with a Dockerfile that can be used to reproduce this so I can test the build changes?

tri-bao commented 9 months ago

@dlemstra I attached the test project with a Dockerfile in the zip Test.zip

Build: docker build -t test-magicknet:local .

Run: docker run -it --rm test-magicknet:local

dlemstra commented 9 months ago

Using that option did not prevent this issue. I don't know what should be done to prevent this. The odd part is that my library is build statically and the other library is loaded dynamically. I don't understand how this even can cause issues. It might help if I disable asserts but it looks like that requires an upgrade of the library and that was a lot of work last time I did this.

tri-bao commented 9 months ago

I don't understand either. This probably gives some hints https://github.com/lovell/sharp-libvips/pull/62

dlemstra commented 9 months ago

It doesn't give me any hints. You or someone else will need to come up with a solution for this.