Unresolved External - das leidige Thema



  • Hi BCBs,
    jetzt hab ICH mal ein Problem, und ich hoffe, ihr könnt mir helfen. Also, ich hab ein Programm fertig gemacht und wollte es dann zur StandAlone-Exe machen. Das heißt "Dyn. RTL verwenden" deaktivieren und "Mit Laufzeitpackages compilieren" deaktivieren. Und genau da ist der Haken. Lasse ich letzteres aktiviert, kompiliert das Programm ohne Probleme, aber wenn ich das deaktiviere, dann bekomme ich 6 Linkerfehler, die sicher alle mit ein und demselben Problem zu tun haben:

    [LinkerFehler] Unresolved external 'Jpeg::TJPEGImage::~TJPEGImage() __fastcall' referenced from E:\C++\PROJEKTE\REGIONBUILDER\MAINWINDOW.OBJ.
    [LinkerFehler] Unresolved external 'Gifimage::TGIFImage::~TGIFImage() __fastcall' referenced from E:\C++\PROJEKTE\REGIONBUILDER\MAINWINDOW.OBJ.
    [LinkerFehler] Unresolved external 'Jpeg::TJPEGImage::' referenced from E:\C++\PROJEKTE\REGIONBUILDER\MAINWINDOW.OBJ.
    [LinkerFehler] Unresolved external 'Jpeg::TJPEGImage::TJPEGImage() __fastcall' referenced from E:\C++\PROJEKTE\REGIONBUILDER\MAINWINDOW.OBJ.
    [LinkerFehler] Unresolved external 'Gifimage::TGIFImage::' referenced from E:\C++\PROJEKTE\REGIONBUILDER\MAINWINDOW.OBJ.
    [LinkerFehler] Unresolved external 'Gifimage::TGIFImage::TGIFImage() __fastcall' referenced from E:\C++\PROJEKTE\REGIONBUILDER\MAINWINDOW.OBJ.
    

    Es geht also um die Komponenten TGIFImage und TJPEGImage. Hab BCB3. Beim Versuch, andere Proggis StandAlone-zu-kompilieren, die ebenfalls diese Kompos verwenden, gab es keine Fehler. Kann mir jemand einen Tipp geben? Hab schon versucht, die OBJ-Dateien mal zu löschen - kein Erfolg.

    [ Dieser Beitrag wurde am 16.12.2002 um 14:21 Uhr von WebFritzi editiert. ]



  • Hast versehentlich ein link pragma gelöscht oder auskommentiert?



  • Original erstellt von @xel:
    Hast versehentlich ein link pragma gelöscht oder auskommentiert?

    Gelöscht: Keine Ahnung.
    Auskommentiert: Nein.



  • Klopp' Dir doch noch einmal ein paar Komponenten vom entsprechenden Typ aufs Formular und entferne sie wieder; dann rekompilieren; manchmal hilft's...



  • Original erstellt von @xel:
    Klopp' Dir doch noch einmal ein paar Komponenten vom entsprechenden Typ aufs Formular und entferne sie wieder; dann rekompilieren; manchmal hilft's...

    Hier bestimmt nicht, denn die Kompos sind keine Visual Components. Das sind nichts weiter als Klassen wie Graphics::TBitmap oder TIcon.



  • Oh, dann weiß ich's auch nicht. Können da ein paar Such-/Bibliothekspfade in den Projektoptionen nicht richtig eingestellt sein?



  • Ne, ist alles richtig eingestellt. Aber mich interessiert ja mal, was in diesem Falle das "Unresolved External" bedeutet, also "Unerfüllter externer Baustein" oder so...



  • Original erstellt von WebFritzi:
    Ne, ist alles richtig eingestellt. Aber mich interessiert ja mal, was in diesem Falle das "Unresolved External" bedeutet, also "Unerfüllter externer Baustein" oder so...

    Ich interpretiere das folgendermassen:
    in der OBJ-Datei steht ein Aufruf einer Funktion/Methode. Allerdings kann der Linker dazu nicht die entsprechende Implementation aufrufen (-> unresolved = nicht aufgelöst, external = irgendeine externe Funktion/Methode etc).

    Ich hatte so ein Problem als ich DLLs einbinden wollte.

    In dieser DLL hatte ich ein ADOQuery-Objekt.
    Habe dort dann auch die Header-Datei eingebunden, aber beim linken kann eben auch immer dieser Fehler.
    Dann habe ich als nächstes die *.hpp-Datei (ich glaube sie hiess ADOdb.hpp) dem Projekt per Hand hinzugefügt.
    Also, hab ich dann das Projekt neu erstellen wollen, aber es hagelte mir jetzt massig Fehlermeldungen wegen der *.hpp Datei.
    Daraufhin hab ich die *.hpp Datei wieder entfernt und einfach nochmals auf Aktualisieren geklickt.
    Und dann hat's komischerweise funktioniert - keine Compiler-/Linker-Fehler mehr.

    Ich kann mit das bis heute noch nicht erklären, aber auf jeden Fall hat's dann funktioniert.

    Vielleicht ist das auch ein Bug vom BCB...

    Kannst's ja mal versuchen, die entsprechenden *.hpp's einzubinden, einmal compilieren und danach wieder rausnehmen



  • Die jpeg.hpp und die gifimage.hpp muss ich standardmäßig einbinden (also per include). Sonst erkennt er die Typen TJPEGImage und TGIFImage nicht.



  • Ja, aber per Projekt->Dem Projekt hinzufügen die *.hpp's hinzufügen.
    Und danach dann wieder per Projekt->Aus Dem Projekt entfernen die *.hpp's wieder entfernen.

    Die #include-Anweisungen müssen aber auf jeden Fall erhalten bleiben



  • Hat erwartungsgemäß auch nichts gebracht.



  • So, jetzt reichts mir!!! 😡 Ich installiere den Builder neu. Und wenn das dann nicht klappt, dann.... dann steige ich auf den VC um. überleg Ne, so tief gesunken bin ich doch noch nicht. 😉



  • Trink Dich einen! :p



  • Ich habe diesen Beitrag nur mal so überflogen, schlag mich nicht, wenn ich jetzt was sage, was schon erwähnt wurde:

    Hast du irgend welche Funktionen in der *.cpp Datei gelöscht, wo in der *.h noch die Deklaration steht ?

    [ Dieser Beitrag wurde am 16.12.2002 um 16:15 Uhr von YLIREBUS editiert. ]



  • Hallo

    Du hat die includes in einen Namespace gepackt. In der Library sind die Klassen jedoch nicht in einem Namespace. Deshalb findet er sie nicht mehr.

    Gruss Chris



  • Original erstellt von Chrisi_K:
    Du hat die includes in einen Namespace gepackt. In der Library sind die Klassen jedoch nicht in einem Namespace. Deshalb findet er sie nicht mehr.

    Woher weißt du das denn? 😕



  • Oh, oh: das könnt's sein. Hoffentlich hat sich WebFritzi noch nicht unter den Tisch getrunken... 😃

    @Eßer: Er weiß es halt...(pssssst)

    [ Dieser Beitrag wurde am 16.12.2002 um 16:35 Uhr von @xel editiert. ]

    [ Dieser Beitrag wurde am 16.12.2002 um 16:42 Uhr von @xel editiert. ]



  • @Esser

    [LinkerFehler] Unresolved external 'Jpeg::TJPEGImage::~TJPEGImage() __fastcall' referenced from E:\C++\PROJEKTE\REGIONBUILDER\MAINWINDOW.OBJ.

    Daher weiss ich das.



  • Nö, kann nicht sein. Die Linkerfehler kommen auch mit Dyn. RTL und Laufzeitpackages.

    Habs ausprobiert.

    @WebFritzi: Hör nicht auf Axel.



  • Oh, du hast recht. Trotzdem: Die Linkerfehler kommen auch mit Dyn. RTL und Laufzeitpackages.

    Edit: Wenn du kein 'ß' hast, dann bitte "Ehser". Danke.

    [ Dieser Beitrag wurde am 16.12.2002 um 16:47 Uhr von Eßer editiert. ]



  • Geht jetzt, aber fragt mich nicht, warum. Ich hatte da noch ein anderes Problem: ich hatte die ganzen jpeg- und gif-Sachen mal weggelassen und habe ganz normal mit Laufzeitpackages kompiliert - wunderbar. OK. Dann habe ich das wieder deaktiviert, und was bekomme ich da? Eine AccessViolation. Direkt nach dem Linken. Wo? Keine Ahnung. Hat er nichts zu gesagt. Nach 50000mal rumprobieren hab ich dann irgendwas im Quelltext geändert, und es lief. Keine Ahnung warum. Irgendwie spinnt der BCB manchmal so richtig ab. Das muss ich hier mal so sagen.
    Nichts für ungut, Leute. Danke der Anteilnahme und euren Ratekünsten. 😉


Anmelden zum Antworten