Closed micwoj92 closed 6 days ago
I think it's an issue of the Crystal compiler, but at the same time these libraries are used by other libraries that tijolo links directly, like gtk4, gsk and gdk.
there is a way to test this, remove the pkg-config
from lib LibPango
declaration in lib/gi-crystal/src/auto/pango/lib_pango.cr
, recompile and check using ldd -r
if pango shows up there, I think it does. Excuse me to not do this myself is because I'm o phone right now π
$ libtree bin/tijolo
bin/tijolo
βββ libvte-2.91-gtk4.so.0 [default path]
β βββ libcairo.so.2 [default path]
β β βββ libpixman-1.so.0 [default path]
β β βββ libxcb-shm.so.0 [default path]
β β β βββ libxcb.so.1 [default path]
β β β βββ libXau.so.6 [default path]
β β β βββ libXdmcp.so.6 [default path]
β β βββ libxcb-render.so.0 [default path]
β β β βββ libxcb.so.1 [default path]
β β βββ libxcb.so.1 [default path]
β β βββ libXrender.so.1 [default path]
β β β βββ libX11.so.6 [default path]
β β β βββ libxcb.so.1 [default path]
β β βββ libXext.so.6 [default path]
β β β βββ libX11.so.6 [default path]
β β βββ libX11.so.6 [default path]
β β βββ libfreetype.so.6 [default path]
β β β βββ libz.so.1 [default path]
β β β βββ libbrotlidec.so.1 [default path]
β β β β βββ libbrotlicommon.so.1 [default path]
β β β βββ libharfbuzz.so.0 [default path]
β β β β βββ libgraphite2.so.3 [default path]
β β β β βββ libglib-2.0.so.0 [default path]
β β β β β βββ libpcre2-8.so.0 [default path]
β β β β βββ libfreetype.so.6 [default path]
β β β βββ libpng16.so.16 [default path]
β β β β βββ libz.so.1 [default path]
β β β βββ libbz2.so.1.0 [default path]
β β βββ libfontconfig.so.1 [default path]
β β β βββ libfreetype.so.6 [default path]
β β β βββ libexpat.so.1 [default path]
β β βββ libpng16.so.16 [default path]
β β βββ libz.so.1 [default path]
β βββ libpangocairo-1.0.so.0 [default path]
β β βββ libpango-1.0.so.0 [default path]
β β β βββ libharfbuzz.so.0 [default path]
β β β βββ libthai.so.0 [default path]
β β β β βββ libdatrie.so.1 [default path]
β β β βββ libfribidi.so.0 [default path]
β β β βββ libgio-2.0.so.0 [default path]
β β β β βββ libglib-2.0.so.0 [default path]
β β β β βββ libmount.so.1 [default path]
β β β β β βββ libblkid.so.1 [default path]
β β β β βββ libz.so.1 [default path]
β β β β βββ libgmodule-2.0.so.0 [default path]
β β β β β βββ libglib-2.0.so.0 [default path]
β β β β βββ libgobject-2.0.so.0 [default path]
β β β β βββ libglib-2.0.so.0 [default path]
β β β β βββ libffi.so.8 [default path]
β β β βββ libgobject-2.0.so.0 [default path]
β β β βββ libglib-2.0.so.0 [default path]
β β βββ libfontconfig.so.1 [default path]
β β βββ libharfbuzz.so.0 [default path]
β β βββ libgobject-2.0.so.0 [default path]
β β βββ libglib-2.0.so.0 [default path]
β β βββ libcairo.so.2 [default path]
β β βββ libpangoft2-1.0.so.0 [default path]
β β βββ libpango-1.0.so.0 [default path]
β β βββ libfreetype.so.6 [default path]
β β βββ libfontconfig.so.1 [default path]
β β βββ libharfbuzz.so.0 [default path]
β β βββ libgio-2.0.so.0 [default path]
β β βββ libgobject-2.0.so.0 [default path]
β β βββ libglib-2.0.so.0 [default path]
β βββ libgtk-4.so.1 [default path]
β β βββ libgmodule-2.0.so.0 [default path]
β β βββ libXinerama.so.1 [default path]
β β β βββ libX11.so.6 [default path]
β β β βββ libXext.so.6 [default path]
β β βββ libXrandr.so.2 [default path]
β β β βββ libXext.so.6 [default path]
β β β βββ libX11.so.6 [default path]
β β β βββ libXrender.so.1 [default path]
β β βββ libXfixes.so.3 [default path]
β β β βββ libX11.so.6 [default path]
β β βββ libXdamage.so.1 [default path]
β β β βββ libX11.so.6 [default path]
β β βββ libXcursor.so.1 [default path]
β β β βββ libXrender.so.1 [default path]
β β β βββ libX11.so.6 [default path]
β β β βββ libXfixes.so.3 [default path]
β β βββ libXext.so.6 [default path]
β β βββ libwayland-egl.so.1 [default path]
β β βββ libwayland-client.so.0 [default path]
β β β βββ libffi.so.8 [default path]
β β βββ libxkbcommon.so.0 [default path]
β β βββ libjpeg.so.8 [default path]
β β βββ libtiff.so.6 [default path]
β β β βββ libzstd.so.1 [default path]
β β β βββ libz.so.1 [default path]
β β β βββ libjpeg.so.8 [default path]
β β β βββ libjbig.so.2.1 [default path]
β β β βββ liblzma.so.5 [default path]
β β βββ libpng16.so.16 [default path]
β β βββ libvulkan.so.1 [default path]
β β βββ libtracker-sparql-3.0.so.0 [default path]
β β β βββ libglib-2.0.so.0 [default path]
β β β βββ libxml2.so.2 [default path]
β β β β βββ libz.so.1 [default path]
β β β β βββ libicuuc.so.75 [default path]
β β β β β βββ libicudata.so.75 [default path]
β β β β βββ liblzma.so.5 [default path]
β β β βββ libjson-glib-1.0.so.0 [default path]
β β β β βββ libgio-2.0.so.0 [default path]
β β β β βββ libglib-2.0.so.0 [default path]
β β β β βββ libgobject-2.0.so.0 [default path]
β β β βββ libgmodule-2.0.so.0 [default path]
β β β βββ libsqlite3.so.0 [default path]
β β β βββ libgobject-2.0.so.0 [default path]
β β β βββ libgio-2.0.so.0 [default path]
β β βββ libcloudproviders.so.0 [default path]
β β β βββ libglib-2.0.so.0 [default path]
β β β βββ libgobject-2.0.so.0 [default path]
β β β βββ libgio-2.0.so.0 [default path]
β β βββ libpangoft2-1.0.so.0 [default path]
β β βββ libX11.so.6 [default path]
β β βββ libXi.so.6 [default path]
β β β βββ libX11.so.6 [default path]
β β β βββ libXext.so.6 [default path]
β β βββ libgraphene-1.0.so.0 [default path]
β β β βββ libglib-2.0.so.0 [default path]
β β β βββ libgobject-2.0.so.0 [default path]
β β βββ libcairo-script-interpreter.so.2 [default path]
β β β βββ libcairo.so.2 [default path]
β β β βββ libfreetype.so.6 [default path]
β β β βββ libfontconfig.so.1 [default path]
β β β βββ libz.so.1 [default path]
β β β βββ liblzo2.so.2 [default path]
β β βββ libepoxy.so.0 [default path]
β β βββ libgdk_pixbuf-2.0.so.0 [default path]
β β β βββ libtiff.so.6 [default path]
β β β βββ libjpeg.so.8 [default path]
β β β βββ libpng16.so.16 [default path]
β β β βββ libgio-2.0.so.0 [default path]
β β β βββ libgmodule-2.0.so.0 [default path]
β β β βββ libgobject-2.0.so.0 [default path]
β β β βββ libglib-2.0.so.0 [default path]
β β βββ libfontconfig.so.1 [default path]
β β βββ libcairo-gobject.so.2 [default path]
β β β βββ libcairo.so.2 [default path]
β β β βββ libgobject-2.0.so.0 [default path]
β β β βββ libglib-2.0.so.0 [default path]
β β βββ libfribidi.so.0 [default path]
β β βββ libcairo.so.2 [default path]
β β βββ libharfbuzz.so.0 [default path]
β β βββ libpango-1.0.so.0 [default path]
β β βββ libpangocairo-1.0.so.0 [default path]
β β βββ libgio-2.0.so.0 [default path]
β β βββ libgobject-2.0.so.0 [default path]
β β βββ libglib-2.0.so.0 [default path]
β βββ libsystemd.so.0 [default path]
β β βββ libcap.so.2 [default path]
β β βββ libzstd.so.1 [default path]
β β βββ liblzma.so.5 [default path]
β β βββ liblz4.so.1 [default path]
β β βββ libgcrypt.so.20 [default path]
β β βββ libgpg-error.so.0 [default path]
β βββ liblz4.so.1 [default path]
β βββ libpcre2-8.so.0 [default path]
β βββ libicuuc.so.75 [default path]
β βββ libgnutls.so.30 [default path]
β β βββ libp11-kit.so.0 [default path]
β β β βββ libffi.so.8 [default path]
β β βββ libgmp.so.10 [default path]
β β βββ libhogweed.so.6 [default path]
β β β βββ libnettle.so.8 [default path]
β β β βββ libgmp.so.10 [default path]
β β βββ libnettle.so.8 [default path]
β β βββ libtasn1.so.6 [default path]
β β βββ libunistring.so.5 [default path]
β β βββ libidn2.so.0 [default path]
β β βββ libunistring.so.5 [default path]
β βββ libfribidi.so.0 [default path]
β βββ libcairo-gobject.so.2 [default path]
β βββ libpango-1.0.so.0 [default path]
β βββ libglib-2.0.so.0 [default path]
β βββ libgobject-2.0.so.0 [default path]
β βββ libgio-2.0.so.0 [default path]
βββ libevent_pthreads-2.1.so.7 [default path]
β βββ libevent_core-2.1.so.7 [default path]
βββ libgc.so.1 [default path]
βββ libevent-2.1.so.7 [default path]
βββ libpcre2-8.so.0 [default path]
βββ libadwaita-1.so.0 [default path]
β βββ libglib-2.0.so.0 [default path]
β βββ libappstream.so.5 [default path]
β β βββ libglib-2.0.so.0 [default path]
β β βββ libstemmer.so.0 [default path]
β β βββ libzstd.so.1 [default path]
β β βββ libsystemd.so.0 [default path]
β β βββ libyaml-0.so.2 [default path]
β β βββ libxml2.so.2 [default path]
β β βββ libgio-2.0.so.0 [default path]
β β βββ libxmlb.so.2 [default path]
β β β βββ libgio-2.0.so.0 [default path]
β β β βββ libstemmer.so.0 [default path]
β β β βββ libzstd.so.1 [default path]
β β β βββ liblzma.so.5 [default path]
β β β βββ libglib-2.0.so.0 [default path]
β β β βββ libgobject-2.0.so.0 [default path]
β β βββ libcurl.so.4 [default path]
β β β βββ libnghttp3.so.9 [default path]
β β β βββ libz.so.1 [default path]
β β β βββ libbrotlidec.so.1 [default path]
β β β βββ libzstd.so.1 [default path]
β β β βββ libgssapi_krb5.so.2 [default path]
β β β β βββ libkrb5.so.3 [default path]
β β β β β βββ libk5crypto.so.3 [default path]
β β β β β β βββ libkrb5support.so.0 [default path]
β β β β β β β βββ libkeyutils.so.1 [default path]
β β β β β β β βββ libresolv.so.2 [default path]
β β β β β β βββ libresolv.so.2 [default path]
β β β β β β βββ libkeyutils.so.1 [default path]
β β β β β βββ libresolv.so.2 [default path]
β β β β β βββ libkeyutils.so.1 [default path]
β β β β β βββ libkrb5support.so.0 [default path]
β β β β β βββ libcom_err.so.2 [default path]
β β β β βββ libresolv.so.2 [default path]
β β β β βββ libkeyutils.so.1 [default path]
β β β β βββ libkrb5support.so.0 [default path]
β β β β βββ libcom_err.so.2 [default path]
β β β β βββ libk5crypto.so.3 [default path]
β β β βββ libcrypto.so.3 [default path]
β β β βββ libssl.so.3 [default path]
β β β β βββ libcrypto.so.3 [default path]
β β β βββ libpsl.so.5 [default path]
β β β β βββ libunistring.so.5 [default path]
β β β β βββ libidn2.so.0 [default path]
β β β βββ libssh2.so.1 [default path]
β β β β βββ libz.so.1 [default path]
β β β β βββ libcrypto.so.3 [default path]
β β β β βββ libssl.so.3 [default path]
β β β βββ libidn2.so.0 [default path]
β β β βββ libnghttp2.so.14 [default path]
β β βββ libgobject-2.0.so.0 [default path]
β βββ libgraphene-1.0.so.0 [default path]
β βββ libpango-1.0.so.0 [default path]
β βββ libgtk-4.so.1 [default path]
β βββ libgobject-2.0.so.0 [default path]
β βββ libgio-2.0.so.0 [default path]
β βββ libfribidi.so.0 [default path]
βββ libgtksourceview-5.so.0 [default path]
β βββ libpcre2-8.so.0 [default path]
β βββ libfontconfig.so.1 [default path]
β βββ libpangoft2-1.0.so.0 [default path]
β βββ libxml2.so.2 [default path]
β βββ libcairo.so.2 [default path]
β βββ libgdk_pixbuf-2.0.so.0 [default path]
β βββ libpango-1.0.so.0 [default path]
β βββ libpangocairo-1.0.so.0 [default path]
β βββ libgtk-4.so.1 [default path]
β βββ libgio-2.0.so.0 [default path]
β βββ libgobject-2.0.so.0 [default path]
β βββ libglib-2.0.so.0 [default path]
β βββ libfribidi.so.0 [default path]
βββ libgio-2.0.so.0 [default path]
βββ libgobject-2.0.so.0 [default path]
βββ libgraphene-1.0.so.0 [default path]
βββ libvulkan.so.1 [default path]
βββ libglib-2.0.so.0 [default path]
βββ libcairo.so.2 [default path]
βββ libcairo-gobject.so.2 [default path]
βββ libgdk_pixbuf-2.0.so.0 [default path]
βββ libpango-1.0.so.0 [default path]
βββ libpangocairo-1.0.so.0 [default path]
βββ libgtk-4.so.1 [default path]
βββ libharfbuzz.so.0 [default path]
So, the libraries are needed anyway, I don't know what would be the side effect of this overlinking, do you?
Here is mail from Debian mailing list discussing this issue in depth https://lists.debian.org/debian-devel-announce/2005/11/msg00016.html
there is a way to test this, remove the
pkg-config
fromlib LibPango
declaration inlib/gi-crystal/src/auto/pango/lib_pango.cr
, recompile and check usingldd -r
if pango shows up there, I think it does. Me excuse to not do this myself is because I'm o phone right now π
I tried this and for me it shows same as before (I am using -u, so this only shows unused dependencies, this is same check that namcap is using):
$ ldd -r -u bin/tijolo
Unused direct dependencies:
/usr/lib/libharfbuzz.so.0
/usr/lib/libpangocairo-1.0.so.0
/usr/lib/libpango-1.0.so.0
/usr/lib/libgdk_pixbuf-2.0.so.0
/usr/lib/libcairo-gobject.so.2
/usr/lib/libcairo.so.2
/usr/lib/libvulkan.so.1
/usr/lib/libgraphene-1.0.so.0
/usr/lib/libm.so.6
~I think it's valid to file a bug report on https://github.com/crystal-lang/crystal with a minimal example, since there's nothing that can be done to fix this here.~
The issue isn't in Crystal compiler, but in GTK4 pkgconfig files.
I editted the GTK pkg-config file here changing:
Requires: pango >= 1.50.0, pangocairo >= 1.50.0, gdk-pixbuf-2.0 >= 2.30.0, cairo >= 1.14.0, cairo-gobject >= 1.14.0, vulkan, gio-2.0 >= 2.76.0
#Requires: pango >= 1.50.0, pangocairo >= 1.50.0, gdk-pixbuf-2.0 >= 2.30.0, cairo >= 1.14.0, cairo-gobject >= 1.14.0, vulkan, graphene-gobject-1.0 >= 1.10.0, gio-2.0 >= 2.76.0
L
Result, application links correctly, but now graphene isn't show as an unused direct linked library.
I don't think that editing system .pc files is right way to do this. I guess then this should be reported to upstream GNOME.
Yes sure, the edit was just a way for me to test where the issue was located, nothing more.
diff --git a/Makefile b/Makefile
index dd7b6e4..a97abce 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ PREFIX ?= /usr
CR_FLAGS ?= -Dpreview_mt -Dstrict_multi_assign -Duse_pcre2 -Dpreview_overload_order
all: .WAIT configure
- shards build --release -Dpreview_mt $(CR_FLAGS) -s
+ shards build --release -Dpreview_mt $(CR_FLAGS) -s --link-flags='-Wl,--as-needed'
configure:
shards install
Nice, could you create a PR with this?
Describe the bug Hello, this "issue" affects.
tijolo
andtijolo-git
packages. It is overlinking of libraries.To Reproduce Steps to reproduce the behavior:
Expected behavior No unused libraries
Screenshots N/A
Environment (please complete the following information):
Additional context This is not really issue of this program.
I tried playing around with linker flags, but wasn't able to find resolution to it. I am not sure, it might be just limitation of crystal that it doesn't do it "proper way". In this case, feel free to close this issue.