Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » User abfragen, wenn statisch kompiliert

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
27.09.2006, 13:43 Uhr
flappinski



Hallo, ich frage zur Laufzeit des Programms den das Programm aufrufenden User mit 'getpwuid(getuid())->pw_name' ab. Nun funktioniert das prima auf meiner Maschiene. Wenn ich jetzt statisch kompiliere, gibt gcc eine Warnmeldung raus, dass das Programm dann die Shared Librarys der glibc version braucht.
Und wenn ich dann dieses kompilierte Programm auf einem anderen Rechner laufen lassen will, bekomme ich einen segmentation fault, den ich ohne diese Abfrage nicht bekomme.
Und nun die Frage:
Gibt es eine "static save" Abfrage des momentan angemeldeten Users?
Danke,
und schöne Grüsse,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.09.2006, 16:48 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


ich weiß ja, system ist böse aber wenn du nicht kompilieren willst würd ich schon fast mit `whoami` arbeiten ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.09.2006, 17:22 Uhr
flappinski



ich habe an sich nichts gegen system, aber wie bekomme ich die Ausgabe von whoami wieder in das eintliche Programm?
Desweiteren will ich sehr wohl kompilieren, aber der oben genannte Befehl lässt sich nich statisch kompilieren. Oder mache ich da einen Denkfehler?

Dieser Post wurde am 27.09.2006 um 17:41 Uhr von flappinski editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.09.2006, 18:26 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wieso packste nicht einfach die definition von der funktion manuell rein?

Ansonsten - haste mal gedebuggt auf der absturzmaschine wo der fehler liegt? Denn wenn er die Funktion nicht auflösen könnte (also nicht aus der libc laden) dann würde er dir ein unresolved symbol um die ohren hauen.

Ansonsten ist getpwuid nicht threadsafe. Probier das ganze mal mit getpwuid_r - evtl findet er auch den entsprechenden user nicht? Kann ja sein das er die uid von dir auf dem Rechner nicht auflösen kann wegen nis/yp o.ä.
--
class God : public ChuckNorris { };

Dieser Post wurde am 27.09.2006 um 18:28 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.09.2006, 09:31 Uhr
virtual
Sexiest Bit alive
(Operator)


Hm, mich wundert die Fehlermeldung:

C++:
#include <pwd.h>
#include <stdio.h>
#include <sys/types.h>

int main() {
    char* name = getpwuid(getuid())->pw_name;
    puts(name);
}


Läßt sich mit gcc -static a.c ganz bequem statisch binden:

Code:
$ gcc -static a.c
$ ldd a.out
        not a dynamic executable
$ ./a.out
virtual


(das ldd würde bei einem dynamisch gebauten Executable die liste der Shared Libraries ausgeben).

Wenn Bei Dir der gcc (also eigentlich der ld) meint zwingend was dynamisch binden zu müssen, handelt es sich möglicherweise um ein ein Komplexeres Programm, wo bereits schon einige andere Dynamische Libs gebunden werden? - In diesem fall solltest auf keinen Fall statische und dynamische Bindung mischen, das gibt Erfahrungsgemäß immer nur Tränen (ist auch einleuchtend bei näherer Betrachtung).

Wenn Du die "System" Variante nehmen willst, dann solltest Du stattdessen popen nehmen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.09.2006, 10:57 Uhr
flappinski



Hi Flosoft,
Ich habe zwar nicht so genau verstanden, was Du gesagt hast (wie packt man eine Funktionmanuell rein?), aber auf der Google-Suche nach getpwuid_r bin ich auf getlogin() gestossen, und das funktioniert einwandfrei! Gibt es da einen Haken?
Danke für die Hilfe,
Grüsse,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.09.2006, 11:05 Uhr
flappinski



Hi Virtual,
vielleicht habe ich ein gcc-Problem, meine Ausgabe bei deinem Beispielprogramm:

C++:
userx@pci49:~/persoenlich/c++spielwiese/WG_Permer/src/temp> gcc -static test.c
/tmp/cckEp5mQ.o: In function `main':
test.c:(.text+0x1a): warning: Using '
getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking


Ich benutze so eine beta-version von gcc 4.2.0 , vielleicht ist das das Problem....
Schoenen Gruss.
Stephan

Dieser Post wurde am 28.09.2006 um 11:06 Uhr von flappinski editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.09.2006, 11:12 Uhr
flappinski



Hi,
mit 4.0.3 macht er es auch nicht....
Wie hast Du das hinbekommen?
Grüsse,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.09.2006, 17:37 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


getlogin ist halt wieder nicht threadsafe - also getlogin_r benutzen. Ansonsten würde ich da auf nen Fehler in der Betaversion tippen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.09.2006, 11:33 Uhr
flappinski



Hi Flosoft,
1) Fehler in der Betaversion scheint es nicht zu sein. 4.0.3 uns 3.3.1 bringen die gleiche Fehlermeldung. Geht das bei Dir wie bei Virtual?
2) Gibt es eine Liste nicht-threadsafer Funktionen? Vielleicht habe ich da noch mehr...
Danke soweit,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: