Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » problem mit unterstrichen

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 <
000
09.11.2006, 18:31 Uhr
scales of justice



Ich will eins meiner Programme mit gcc unter Windows kompilieren.

Das Problem ist, dass gcc unter Windows vor jede Funktion einen Unterstrich macht,
und ich keine Lust hab alle meine Funktionen umzubenennen (was ich auch wenn ichs dann wieder auf Linux kompilieren will nochmal machen müsste)

außerdem benutz ich eine Library die eben keine solchen Unterstriche hat, von der ich den Quellcode nicht habe,
deswegen geht das mit dem umbenennen sowiso nicht

gibts da vielleicht einen Trick wie ich gcc klarmachen kann, dass ich keine unterstriche will?
oder ld sagen kann, dass er sie nicht beachten soll?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.11.2006, 22:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hä?

seit wann erzeugt der gcc unterstriche im quellcode? Wenn er irgendwelche Sachen bei den Funktionsnamen erzeugt, nennt man das "name-mangling". Wenn du das nicht willst musst du deine Funktion mit extern "C" kennzeichnen, denn in C gibt es kein "name-mangling". Wichtig ist nur das man dann keine extrem speziellen C++-Spracherweiterungen als Parameter übergeben kann
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.11.2006, 20:41 Uhr
scales of justice



nein nicht im Quellcode

hinterher im compilierten Code sind Unterstriche vor den Funktionen,
und er erwartet auch dass externe Funktionen welche haben

extern "C" hilft auch nicht weiter, da ich sowiso C und nicht C++ benutz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.11.2006, 09:29 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


dann würde ich mal tippen du kompilierst nicht als C-Code. C kennt eigentlich kein name-mangling
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.11.2006, 11:49 Uhr
Blubber2063



Ich versteh nich warum du das Problem mit den Unterstrichen hast, aber C setzt vor jede Funktion einen _ wenn es compiliert wird. Das ist in C++ glaub ich nicht so gewesen, aber in C auf jeden Fall. Und das ist unter Windows wie Linux gleich, aber ich versteh nicht wo dein Problem ist, du müsstest ja dann irgendwo was dazu linken was nicht C ist ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.11.2006, 18:25 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Blubber2063:
Ich versteh nich warum du das Problem mit den Unterstrichen hast, aber C setzt vor jede Funktion einen _ wenn es compiliert wird. Das ist in C++ glaub ich nicht so gewesen, aber in C auf jeden Fall. Und das ist unter Windows wie Linux gleich, aber ich versteh nicht wo dein Problem ist, du müsstest ja dann irgendwo was dazu linken was nicht C ist ?

C macht den _ davor, C++ macht noch einiges mehr u.A. hinten dran

Nur hatte ich das so verstanden das der NOCH mehr _ davor macht als den einen den er immer macht. Versteh dann nicht wo das Problem liegt ?!?
--
class God : public ChuckNorris { };

Dieser Post wurde am 11.11.2006 um 18:25 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.11.2006, 19:55 Uhr
scales of justice



das Problem ist, dass unter Linux kein _ davor gemacht wird,
deswegen konnt ich meine Programme nicht unter Windows kompilieren

wenn ich von C aus beispielweise eine Assemblerfunktion set() aufrufe,
ruft er unter Linux wirklich set() auf, unter Windows aber _set()

ich lass jetzt einfach objcopy immer das _ wegmachen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.11.2006, 05:22 Uhr
Blubber2063



Na eigentlich steht der Unterstrich im C Standard und sollte auch unter Linux erzeugt werden, es kann aber vielleicht sein das dein Compiler tollerant ist in der Hinsicht. Dennoch sollte eigentlich eine Assemblerfunktion die in C aufgerufen werden soll immer einen Unterstrich tragen, egal ob Windows oder Linux, probiers doch mal mit Unterstrich.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.11.2006, 17:58 Uhr
ao

(Operator)


Was ist denn eigentlich das Problem? Ob mit oder ohne Unterstrich, man kann so oder so keine Linux-Kompilate unter Windows aufrufen oder umgekehrt. Und dann spielt es keine Rolle, ob die Aufrufe mit oder ohne _ kodiert sind, Hauptsache, sie sind alle gleich.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.11.2006, 11:57 Uhr
stephanw
localhorst


Ich hab den Thread hier nur überflogen und das Problem auch nicht ganz verstanden, kann mich aber erinnern, dass ich ein ähnliches Problem mit den Unterstrichen auch schon mal hatte - ich glaube im Zusammenhang mit der Nutzung von Win32-DLL's oder so.

@scales of justice: Vielleicht hilft Dir dieser Link hier weiter: Programming Win32 with GNU C and C++
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 14.11.2006 um 11:57 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: