Unnötige Abhängigkeiten der Binaries unter Linux

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Giantics
Beiträge: 88
Registriert: Sa 3. Mär 2007, 13:46
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Langenbrettach

Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von Giantics »

wenn man unter Debian/Ubuntu ein deb-Paket mit dh_make und dpkg-buildpackage erstellt, dann werden die Abhängigkeiten automatisch aufgespürt und eingetragen. Ich bekomme jedoch folgende Ausgabe:

Code: Alles auswählen

dpkg-shlibdeps: Warnung: Abhängigkeit von libgmodule-2.0.so.0 könnte vermieden werden, falls »debian/test-gtk2/usr/share/test-gtk2/test-gtk2« nicht unnötigerweise dagegen gelinkt wäre (es verwendet keines seiner Symbole).
dpkg-shlibdeps: Warnung: Abhängigkeit von libgthread-2.0.so.0 könnte vermieden werden, falls »debian/test-gtk2/usr/share/test-gtk2/test-gtk2« nicht unnötigerweise dagegen gelinkt wäre (es verwendet keines seiner Symbole).
dpkg-shlibdeps: Warnung: Abhängigkeit von libatk-1.0.so.0 könnte vermieden werden, falls »debian/test-gtk2/usr/share/test-gtk2/test-gtk2« nicht unnötigerweise dagegen gelinkt wäre (es verwendet keines seiner Symbole).
dpkg-shlibdeps: Warnung: Abhängigkeit von libpthread.so.0 könnte vermieden werden, falls »debian/test-gtk2/usr/share/test-gtk2/test-gtk2« nicht unnötigerweise dagegen gelinkt wäre (es verwendet keines seiner Symbole).
 
Die Binary wurde mit den Optionen -Xs und -XX gelinkt. Kann man solche unnötigen Abhängigkeiten vermeiden?

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von Targion »

Soweit ich weiß, nicht, da die Abhängigkeiten durch bestimmte die mit eingelinkten Units zu stande kommen.
Macht's denn was aus, wenn ein paar mehr Abhängigkeiten da sind? Viel schlimmer finde ich, dass Lazarus-Anwendungen im LSB-Application-Checker durchfallen.

Giantics
Beiträge: 88
Registriert: Sa 3. Mär 2007, 13:46
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Langenbrettach

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von Giantics »

Schade, naja, wenns nicht anders geht.
Problem ist das zwar keins, allerdings etwas unnötig, wenn zu einem 3MB-Programm noch 17MB unnötige Libs installiert werden (das war jetzt eine reine Schätzung;-))
Bei Gome spielt das wahrscheinlich sowieso keine Rolle, eventuell bei KDE.

marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von marcov »

fpc -XLAgmodule-2= test-gtk

(Das ist kein fehler; das soll gmodule="nichts" meinen)

Giantics
Beiträge: 88
Registriert: Sa 3. Mär 2007, 13:46
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Langenbrettach

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von Giantics »

Habe es so probiert:

Code: Alles auswählen

fpc -S2cgi -OG1 -gl -Xs -XX -XLAgmodule-2= -vewnhi -l -Fu$LCLDir/lcl/units/$ARCH-$OS/ -Fu$LCLDir/lcl/units/$ARCH-$OS/gtk2/ -Fu. -obin/ide-demo -dLCL -dLCLgtk2 test-gtk2.lpr
Brachte leider keine Änderung. Die Meldungen kommen immernoch.

marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von marcov »

Giantics hat geschrieben:Habe es so probiert:

Code: Alles auswählen

fpc -S2cgi -OG1 -gl -Xs -XX -XLAgmodule-2= -vewnhi -l -Fu$LCLDir/lcl/units/$ARCH-$OS/ -Fu$LCLDir/lcl/units/$ARCH-$OS/gtk2/ -Fu. -obin/ide-demo -dLCL -dLCLgtk2 test-gtk2.lpr
Brachte leider keine Änderung. Die Meldungen kommen immernoch.
Kompilier mit -s und guck in die link.res datei. Dort soll irgend wo etwas aehnliches als

-lgmodule-2

sein. Verwende das in die -XLAgmodule-2= Option.

Wenn das nicht da ist, ist dass ein Fehler in die gtk* library binaries (unnoetiche Dependancies von zb gtk auf gmodule), also in der Lunix Distribution, nicht FPC oder Lazarus.

Giantics
Beiträge: 88
Registriert: Sa 3. Mär 2007, 13:46
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Langenbrettach

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von Giantics »

Ich bin mir jetzt nicht ganz sicher, ob ich dich richtig verstanden habe.
Der einzige Abschnitt in der in der link.res mit lgmodule ist folgender:
)

INPUT(
-lgdk_pixbuf-2.0
-latk-1.0
-lX11
-lpango-1.0
-lgmodule-2.0
-lgthread-2.0
-lglib-2.0
-lgobject-2.0
-lgdk-x11-2.0
-lgtk-x11-2.0
-lpthread
-ldl
-lc
)

Also hab ich jetzt kompiliert mit: "-XLAgmodule-2=lgmodule-2.0", brachte keine Veränderung, ebensowenig ""-lgmodule-2.0=".
Hab ich dich richtig verstanden?

marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von marcov »

Giantics hat geschrieben:Ich bin mir jetzt nicht ganz sicher, ob ich dich richtig verstanden habe.
Der einzige Abschnitt in der in der link.res mit lgmodule ist folgender:
)

INPUT(

-lgmodule-2.0
Also

-XLAgmodule-2.0=

Giantics
Beiträge: 88
Registriert: Sa 3. Mär 2007, 13:46
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Langenbrettach

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von Giantics »

Vielen Dank, das scheint wirklich zu funktionieren.

Mit folgendem Kommando sind alle diese Hinweise verschwunden:

Code: Alles auswählen

 fpc -S2cgi -OG1 -gl -Xs -XX -XLAgmodule-2.0= -XLAdl= -XLAgthread-2.0= -XLAatk-1.0= -XLApthread= -vewnhi -l -Fu....

marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von marcov »

Giantics hat geschrieben:Vielen Dank, das scheint wirklich zu funktionieren.

Mit folgendem Kommando sind alle diese Hinweise verschwunden:

Code: Alles auswählen

 fpc -S2cgi -OG1 -gl -Xs -XX -XLAgmodule-2.0= -XLAdl= -XLAgthread-2.0= -XLAatk-1.0= -XLApthread= -vewnhi -l -Fu....
Einige Dokumentation fuer diese parameter ist im Buildfaq: http://www.stack.nl/~marcov/buildfaq/buildfaq.html" onclick="window.open(this.href);return false; oder http://www.stack.nl/~marcov/buildfaq.pdf" onclick="window.open(this.href);return false;

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von Christian »

Das ist trotsdem ein bug, wenn bibliotheken referenziert werden die gar nicht genutzt werden.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von marcov »

Christian hat geschrieben:Das ist trotsdem ein bug, wenn bibliotheken referenziert werden die gar nicht genutzt werden.
Das Problem is dass manche Linux Distributionen die Abhängigkeiten von Bibliotheken nicht im .so's registriert hätten, weil sie das nicht bemerken weil sie gtk-config oder ähnliche specialen Tools nutzten.
Man woll auch nicht tauzende Bugreports beantworten von User die nicht linken können weil sämtliche Symbole (gmodule*) vermissen. Also das ist keinen Bug, aber eine bewusster Wahl.

Aber wir haben schon eine Weile her eingesehen das hardcoding Bibliothek Abhängigkeiten Probleme machen kann, weil es kein Override gibt sonst alle FPC Sourcen rekompilieren. Das ist der Grund für die -XLA Optionen.

Das Problem das Unix extrem C centrisch ist im Build und im API specification, ist auch ein der Problemen mit Linux Standard Base
Zuletzt geändert von marcov am Sa 13. Sep 2008, 11:58, insgesamt 1-mal geändert.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von Christian »

Danke.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von Targion »

Hallo! Ich mache das hier mal wieder auf: Wenn ich wie beschrieben Bibliotheken vom Linken ausnehme, verschwinden zwar die Meldungen, allerdings startet meine Anwendung dann auch nicht mehr. Ich bekomme Meldungen wie

Code: Alles auswählen

Gtk-WARNING **: Failed to load module "libcanberra-gtk-module.so": libcanberra-gtk-module.so: cannot open shared object file: No such file or directory                                                                                                                                             
GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.20.0/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function
usw.
Fehlt bei mir noch eine Option?

marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Unnötige Abhängigkeiten der Binaries unter Linux

Beitrag von marcov »

Targion hat geschrieben:Hallo! Ich mache das hier mal wieder auf: Wenn ich wie beschrieben Bibliotheken vom Linken ausnehme, verschwinden zwar die Meldungen, allerdings startet meine Anwendung dann auch nicht mehr. Ich bekomme Meldungen wie

Code: Alles auswählen

Gtk-WARNING **: Failed to load module "libcanberra-gtk-module.so": libcanberra-gtk-module.so: cannot open shared object file: No such file or directory                                                                                                                                             
GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.20.0/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function
usw.
Fehlt bei mir noch eine Option?
Nein. Hoert sich an als eine einfach nicht compatible (experimentel neue oder modificierten) gtk libs.

Antworten