Linux + GTK + C läuft nur in Verbindung mit Konsole :-(
-
cens schrieb:
if('mit Konsole') < Datei wird kopiert, Programm beendet sich nicht>
else if('Konqueror klick') <Fenster schließt sich, es wird nichts kopiert,Äh, welches if entscheidet über Konsole oder nicht Konsole? Wir sprechen noch über den Quelltext, den ich postete?
-
Hallo,
vielleicht nicht ganz verständlich, wenn ich das programm von dir mit der Konsole ausführe, funktioniert es wie beschrieben.
Wenn das programm im konqueror ausgeführt wird beendet es sich nach dem klicken auf einlesen (selbstverständlich mit richtigen pfaden).Danke!
-
Tut mir leid, ich kann das Verhalten hier nich reproduzieren. Welche Versionen von gtk+ hast du installiert?
-
Also ich habe:
gtk+ : 2.10.6-13 / von Mo 27 Nov 2006 22:02:08 CET
gtk2-engines: 2.8.1-16 / von Mo 27 Nov 2006 22:32:39 CETDanke!
-
Tjo. Alles was ich sagen kann ist: Bring dein gtk+ und Konsorten auf den aktuellsten Stand. Sorry, aber da hier das Problem nicht auftritt, kann ich nicht mehr dazu sagen. Ich müsste es an deiner Mühle sehen, aber das wird schwierig
-
Hallo, werd das ganze jetzt mal updaten und mich dann melden. Hatte mir mal die aktuelle debian version 3.1r5 für sparc runtergeladen und gewundert wieso die installation nicht klappt, habe mir die finger wund installiert, bis ich mal widerwillen in der Bugliste nachgelesen habe - und tatsächlich seit 3.1r1a haben die debianleute die sparc installerkomponenten einfach vergessen
bisschen vom Thema abgewichen...
habe noch fragen 3, die schon seit bestimmt ein 1 Jahr beschäftigen && quälen :
1
. Gibt es bei Gtk+ eine Window-Updatefunktion, mit der man wie bei ncurses (wrefresh()) den Fensterinhalt aktualisieren kann. bisher hatte ich immer das problem das ich auf das fenster warten musste bis der leseprozess fertig war, und bei 80 GB Festplatten kann das eine weile...in zukunft soll man nämlich den leseprozess auch abbrechen können.
2
. (habe schon gesucht wie bekloppter!) gibt es in C (bestimmt nicht) oder bei Linux systemfunktionen mit denen man im handumdrehen die größe von festplatten (oder anderen Blockgeräten) ausgeben kann?, df kann das doch auch. klar man könnte ja auch mit getc zeichenweise hochzählen aber das dauert leider.
3
. ein riesiges andere problem welches ich habe ist die zeigerpositionierung mit lseek (oder so). Angeblich soll das ja in C funktionieren. es funktioniert leider bei mir nicht, in einem Kernel-Programmiererbuch (version 1.2
) von mir steht das diese funktion bei linux mit blockgeräten leider nicht funktioniert. nur leider liest mein programm fast auschließlich von blockgeräten wie z.B. /dev/sda usw.
Die netten VFS-treiber machen das ja auch irgenwie?Danke für die ganze Mühe!
-
cens schrieb:
1
. Gibt es bei Gtk+ eine Window-Updatefunktion, mit der man wie bei ncurses (wrefresh()) den Fensterinhalt aktualisieren kann. bisher hatte ich immer das problem das ich auf das fenster warten musste bis der leseprozess fertig war, und bei 80 GB Festplatten kann das eine weile...in zukunft soll man nämlich den leseprozess auch abbrechen können.
Das refreshen kannst du dir sparen. Implementiere deine Aktion einfach als Thread (Glib::Thread bietet sich an) und lass sie laufen. Über einen Signal-Handler kannst du dann z.B. den Fortschritt an das GtkWindow senden.
2
. (habe schon gesucht wie bekloppter!) gibt es in C (bestimmt nicht) oder bei Linux systemfunktionen mit denen man im handumdrehen die größe von festplatten (oder anderen Blockgeräten) ausgeben kann?, df kann das doch auch. klar man könnte ja auch mit getc zeichenweise hochzählen aber das dauert leider.
http://www.linuxforums.org/forum/linux-kernel/69520-how-get-hard-disk-info-using-c-program.html
3
. ein riesiges andere problem welches ich habe ist die zeigerpositionierung mit lseek (oder so). Angeblich soll das ja in C funktionieren. es funktioniert leider bei mir nicht, in einem Kernel-Programmiererbuch (version 1.2
) von mir steht das diese funktion bei linux mit blockgeräten leider nicht funktioniert. nur leider liest mein programm fast auschließlich von blockgeräten wie z.B. /dev/sda usw.
Die netten VFS-treiber machen das ja auch irgenwie?Das frägst du am Besten im Unix/Linux Subboard weiter unten nochmal, da bin ich überfragt... hab ja auch kein GNU/Linux.
MfG
GPC
-
danke, danke, danke!
-
Hallo, ich habe mal noch eine Frage wollte das ganze mal SuSE 9.2 testen, jedoch ohne erfolg, obwohl ich statisch kompiliert habe:
Optionen:
-O2 -g0 -s `pkg-config --cflags gtk+-2.0` \ `pkg-config --libs gtk+-2.0`trotzdem -s wird nicht statisch kompiliert.
die Fehlermeldung:
./testfunktionen: error while loading shared libraries: libpangocairo-1.0.sowie kann man dem pkg-config denn sagen das alles statisch reingepackt werden soll. sehr wichtig ist mir das das ganze möglichst kompatibel zu allen Linux-X'en ist.
Vielen Dank schon mal!
-
cens schrieb:
trotzdem -s wird nicht statisch kompiliert.
Das ist auch okay so.
-s macht das gleiche, wie wenn du nach dem Kompilieren und Linken noch strip auf das Binary anwenden würdest
Es entfernt die Symbole.
-s: Remove all symbol table and relocation information from the executable.
Was du suchst, ist -static:
-static: On systems that support dynamic linking, this prevents linking with the shared libraries. On other systems, this option has no effect.
Allerdings muss dafür auch gtk+ usw. statisch gebaut worden sein. Wenn du es dynamisch gebaut hast, kannst du lange -static angeben. Das wird nix.
Es ist normal, dass man solche Libs dynamisch linkt. Mach dir da keinen Kopf. Die binary würde eh richtig richtig fett werden, wenn du alles statisch reinkompilieren würdest.
MfG
GPC
-
Vielen Dank!,
dachte immer das -s == --static ist.
ich weiss ja nicht wie groß die datei dann werden würde, 5 MB wäre so die grenze (statt ~15 KB!). Wichtig ist mir die kompatibilität unter den Linux-Systemen, da ich das programm auf 5 verschiedenen system (versionen) verwende.
werde mal versuchen statisch zu gcc'en
-
GPwC schrieb:
Das refreshen kannst du dir sparen. Implementiere deine Aktion einfach als Thread (Glib::Thread bietet sich an) und lass sie laufen. Über einen Signal-Handler kannst du dann z.B. den Fortschritt an das GtkWindow senden.
Bin gerade am kompilieren, hast du mal praktisch einen funktionsaufruf, damit der thread im hintergrund läuft?
MfG & Danke!
Edit:
ich habe jetzt mal selber eine weile gesucht, finde bis auf den Cpp funktionsaufruf kein C aufruf. scheint sowasGlib::thread_init(); in der richtung zu sein jedoch leider nicht der richtige (habe schon ein bisschen herumprobiert jedoch ohne erfolg).
-
-
hallo, das mit dem selbstcompilieren hat nicht so ganz geklappt, jedenfalls nicht die installation, danach musste ich neu installieren...ich habe mal in der paketverwaltung nachgesehen glib gibt es auch statisch würde das ausreichen?
Noch eine Frage wie müsste ich denn statisch kompilieren also welche optionen, die mit pkg config usw.
-O2 -g0 -static `pkg-config --cflags gtk+-2.0` \
`pkg-config --libs gtk+-2.0`ist bestimmt falsch oder?
MfG & Danke!
-
cens schrieb:
hallo, das mit dem selbstcompilieren hat nicht so ganz geklappt, jedenfalls nicht die installation, danach musste ich neu installieren...ich habe mal in der paketverwaltung nachgesehen glib gibt es auch statisch würde das ausreichen?
Wenn es dir reicht, das die glib statisch dazugelinkt wird, schon. Ansonsten: nein.
Ich kann dir aber nicht sagen, ob und wie man gtk+ statisch linkt, weil ich das (a) noch nie gemacht habe und (b) die Idee auch ziemlich schwachsinnig finde. Wenn man gtk+ statisch bauen kann, muss man ihm das irgendwo mitgeben, schätzungsweise bei den Parametern der Autotools. Näheres kann ich dir auch nicht sagen.Daher mein Vorschlag: VERGISS es, gtk+ und Konsorten statisch linken zu wollen, das ist eh überall installiert und wg. Kompatibilität muss man sich wenig Sorgen machen.
Noch eine Frage wie müsste ich denn statisch kompilieren also welche optionen, die mit pkg config usw.
-O2 -g0 -static `pkg-config --cflags gtk+-2.0` \
`pkg-config --libs gtk+-2.0`ist bestimmt falsch oder?
Doch, stimmt.
MfG
GPC
-
Daher mein Vorschlag: VERGISS es, gtk+ und Konsorten statisch linken zu wollen, das ist eh überall installiert und wg. Kompatibilität muss man sich wenig Sorgen machen.
Vielen Dank,
Das kommt mir natürlich recht. Wegen der Kompatibilität: ich habe es auf SL 10.2 erstellt und auf 9.2 läuft es nicht (irgendeine pango/cairo fehlt).
In wie weit ist denn gtk+ Abwärtskompaitbel?
Danke!
-
cens schrieb:
Das kommt mir natürlich recht. Wegen der Kompatibilität: ich habe es auf SL 10.2 erstellt und auf 9.2 läuft es nicht (irgendeine pango/cairo fehlt).
Hat es nicht kompiliert oder hast du das binary von Slack 10.2 einfach auf 9.2 ausgeführt?
Wenn letzteres: Es ist klar, dass es nicht klappt. Schließlich erwartet das Programm die Versionen von gtk+, mit denen es gebaut wurde.
Wenn ersteres: Das ist nicht verwunderlich, denn Slack 9.2 ist ja nun schon ca. 4 Jahre alt und da war bei gtk+ noch nicht alles so, wie es heute ist.Selbst wenn dem Nutzer z.B. cairo fehlt, kann er dies nachinstallieren. Fast alle Distributionen bieten ja einen Paketmanager an (der meistens auch Abhängigkeiten auflöst, na ja, der von Slack tut das ja nicht).
In wie weit ist denn gtk+ Abwärtskompaitbel?
Kommt drauf an, was du alles verwendet hast. Bei deinem jetzigen Programm brauchst du dir keine Gedanken zu machen, das kompiliert wohl auch unter gtk+ 1.x
. Funktionen, die erst seit der aktuellen Version dazugekommen sind, solltest du eher nicht verwenden, wenn du möchtest, dass auch Leute, die ein etwas älteres gtk+
2 installiert haben, dein Programm nutzen können. Die Gefahr sehe ich bei dir jetzt aber auch nicht
-
gut Slack meinte ich nicht, sondern SuSE 9.2 ist aber auch nicht besser, genausoalt
angenommen jemand möchte mein chaotisches programm doch noch mal verwenden, was muss er sicher installiert haben?
Ich tippe auf:
gtk+
pango
cairo
glibDanke!
-
cens schrieb:
gut Slack meinte ich nicht, sondern SuSE 9.2 ist aber auch nicht besser, genausoalt
oops. Ja, das ist nicht besser, in keiner Hinsicht.
angenommen jemand möchte mein chaotisches programm doch noch mal verwenden, was muss er sicher installiert haben?
Ich tippe auf:
gtk+
pango
cairo
glibGenau.
-
Nach einer Weile durch Zufall:
Der Konqueror (der den ich habe) führt Dateien nicht standardmäßig im Homeverzeichnis aus. Wenn man mit shellskript vorher dort hin wechselt klappt alles super!
Danke!