-----Original Message----- From: Daniel Szoska [SMTP:daniel@szoska.de] Sent: Mittwoch, 16. Februar 2000 08:41 To: lug-dd@schlittermann.de Subject: [Lug-dd] C-Probleme
Hallo!
Es geht zwar nicht um Linux, da aber auch einige C-Kenner in der Liste sind, stelle ich trotzdem mal meine Frage, auch mit der Gefahr, unerlaubte (?) Werbung fuer andere Systeme zu machen ;-)
Ich muss seit langem mal wieder was in C machen, es geht um ein Steuerprogramm fuer eine Maschine, welches ich frueher in Borland C 3.0 geschrieben habe. Es soll jetzt als Win32-Console-Application laufen.
Als Compiler will ich den lcc-win32 nehmen, der war letztens in der c't kurz erwaehnt.
Ich habe mir jetzt ein Rahmenprogramm erstellen lassen (im Prinzip nur zum Parsen der Parameter). Im Quelltext habe ich dann noch zwei Header Dateien eingebunden:
#include "m90wlint.h"
#include "m90wernt.h"
Diese beiden Header stammen aus dem Paket zur Ansteuerung der Maschine, dazu gibt es jeweils noch eine LIB- und eine DLL-Datei. Bei der Compilierung erscheint dann eine ganze Menge Fehler, die alle wie folgt aussehen:
Specified export _MCS90_ClearBuffer@8 is not defined Specified export _MCS90_Close@8 is not defined Specified export _MCS90_ConvertError@8 is not defined
Das die Meldung vom Linker kommt, ist mir klar. Ich habe mal in den LIB- bzw. DLL-Dateien nachgeschaut, dort ist zum Beispiel nur der Name MCS90_ConvertError zu finden, also ohne vorangestellten Unterstrich und ohne das @8 am Ende.
Hmmm, falls Du C++ machst, lese weiter ... sonst isses Quark!
C++ und C unter Linux modifiezieren ihre Symbole anders ... aus x() wird _x() usw. Deshalb gibt's in den C-Header immer den Eintrag external "C" { ... quelle ... } und das noch schoen mit #ifdef verpackt. Da Deine Symbole ja fast stimmen, koennte das ein aehnliches Problem sein!
Uebrigens ... falls das C++ Header/Libs sind und Du C benutzt geht's auch nicht!
Ich denke mal, ich muss dem Linker oder dem Compiler irgendwie sagen, dass er das die Namen anders zu suchen hat, aber da hoeren meine bescheidenen Kenntnisse leider auf. Vielleicht hat ja jemand einen Hinweis, was ich noch probieren koennte.
Vielen Dank schon mal im Voraus!
Tschau Daniel
E-Mail: Daniel@Szoska.de
send mail with subject "send PGPKey" for public key and fingerprint
Lug-dd maillist - Lug-dd@schlittermann.de http://mailman.schlittermann.de/mailman/listinfo/lug-dd
On Wed, 16 Feb 2000 08:49:35 +0100, karl-heinz.fandrey@amd.com wrote:
Hmmm, falls Du C++ machst, lese weiter ... sonst isses Quark!
Ist mir eigentlich egal, ich brauche von C++ eighentlich nichts fuer das Proggi.
C++ und C unter Linux modifiezieren ihre Symbole anders ... aus x() wird _x() usw.
Ich habe mir das noch mal angeschaut - in den (fremden) LIB- und DLL-Dateien stehen die Namen ohne Unterstrich, in meiner vom Compiler erzeugten OBJ-Datei stehen die Namen mit Unterstrich am Anfang und @n (das ist wohl die Stackgroesse beim Aufruf), damit kommt dann der Linker wahrscheinlich nicht zurecht.
Ich sehe jetzt zwei Moeglichkeiten:
1. Ich sage dem Compiler, dass er das Voranstellen des Unterstrichs etc. lassen soll 2. Ich generiere mir aus der DLL eine neue LIB-Datei, in denen die Namen stimmen
Uebrigens ... falls das C++ Header/Libs sind und Du C benutzt geht's auch nicht!
Ich denke eher, dass es anders rum ist.
Vielen Dank erst mal, werde mal noch etwas rumprobieren.
Tschau Daniel
E-Mail: Daniel@Szoska.de
send mail with subject "send PGPKey" for public key and fingerprint
lug-dd@mailman.schlittermann.de