Linker Fehler nach Portierung von BCB6 auf CG2007



  • Hallo zusammen,

    ich habe nach der Portierung meiner Projekte von BCB6 nach CG2007 folgendes Problem: Der Linker findet weder die TeeChart noch die QuickReport Bibliotheken. Dabei spielt es keine Rolle, ob inkrementelles Linken aktiviert ist oder nicht, ob ich die Compiler Enhancements von Andreas Hausladen benutze oder nicht.

    Bei den TeeCharts habe ich diese Fehlermeldungen:
    [Linker Fataler Fehler] Datei chart.obj kann nicht geöffnet werden
    [Linker Fataler Fehler] Datei statchar.obj kann nicht geöffnet werden

    Das konnte ich lösen, indem ich alle .lib Dateien aus dem TeeCharts Unterverzeichnis \Delphi11\lib\obj zum Projekt hinzugefügt habe. Das kann allerdings auch nur eine Übergangslösung sein, denn normal ist das sicher nicht.

    Bei den QuickReports kann der Linker nicht ein QR Objekt finden bzw. deren Symbole auflösen, z.B.
    Linker Fehler: Nicht auflösbares externes __fastcall Qrctrls::TQRCustomLabel::SetCaption( System::AnsiString )

    Auch das konnte ich in den Griff kriegen, indem ich die QR4RunC2007.lib in das Projekt aufgenommen habe. Jetzt bekomme ich allerdings die Fehlermeldung
    [Linker Fataler Fehler] Datei DBTables.obj kann nicht geöffnet werden

    Ich vermute mal ganz stark, dass der Linker nicht weiss, in welchen BPLs er nach den object files suchen soll. Und jetzt kommen wir zum seltsamen Teil:

    Neues Projekt mit zwei Formularen erstellt, das Hauptformular enthält ein TChart mit zwei Series, das zweite Formular einen QuickRep, der das TChart aus dem Hauptformular enthält. Kompiliert, linkt, läuft, alles super.
    Das gleiche Spiel dann in meinen "echten" Projekten gemacht und alles ist wie vorher, d.h. der Linker steigt wieder mit den o.g. Fehlermeldungen aus.

    Meine aktuellen Projektkonfigurationen sind folgende:

    1. statische core.lib, die GUI Funktionalität zur Verfügung stellt, inkl. Ausdruck/Vorschau per QuickReport.
    2. VCL Anwendung, die Klassen aus core.lib benutzt.
    3. TeeCharts 8.02, Packages neu übersetzt und installiert. TeeCharts7 komplett deinstalliert und Dateileichen manuell aus system32 Verzeichnis gelöscht
    4. QuickReport 4.07, Packages neu übersetzt und installiert

    Bei der Portierung habe ich lediglich die .h, .cpp und .dfm Dateien übernommen, d.h. ein leeres statisches Bibliothekenprojekt für core.lib erzeugt und dann alle Quelldateien hinzugefügt, sodass die alten BCB6 Projekteinstellungen nicht benutzt worden sind. Für die Hauptanwendung habe ich das gleiche gemacht, eine neue MDI Anwendung erstellt (Datei- und Klassennamen identisch mit denen der Originalanwendung) und anschliessend die Original Quelldateien drüberkopiert.

    Bin mit meinem Latein entgültig am Ende, daher wäre ich für jede Hilfe äusserts dankbar.



  • DocShoe schrieb:

    Ich vermute mal ganz stark, dass der Linker nicht weiss, in welchen BPLs er nach den object files suchen soll.

    BPLs sind auch nur DLLs; der Linker benutzt nur BPIs (Package-Import-Libraries) und LIBs.

    DocShoe schrieb:

    Neues Projekt mit zwei Formularen erstellt, das Hauptformular enthält ein TChart mit zwei Series, das zweite Formular einen QuickRep, der das TChart aus dem Hauptformular enthält. Kompiliert, linkt, läuft, alles super.

    Was passiert, wenn du die Units deiner ursprünglichen Anwendung zu dieser Anwendung hinzufügst?



  • So, habe grad einige Versuche gemacht:

    Versuch 1)
    Testanwendung mit TeeCharts und QuickReport, Funktionen und Klassen aus core.lib importiert und benutzt. Kompiliert, linkt und läuft.

    Versuch 2)
    In echter Anwendung zwei Formulare erzeugt, eins mit einem Chart und einigen Series, ein anderes mit TQuickRep und TQRChart. Kompiliert, linkt aber nicht, Fehler wie bisher:
    [Linker Fataler Fehler] Datei statchar.obj kann nicht geöffnet werden

    Ich hatte eigentlich gehofft, dass CG2007 das Hinzufügen des TChart, TQuickRep und TQRChart Objekts bemerkt und entsprechende Linker Anweisungen erzeugt bzw. die Projekteinstellungen anpasst.

    audacia schrieb:

    BPLs sind auch nur DLLs; der Linker benutzt nur BPIs (Package-Import-Libraries) und LIBs

    Was auch immer. Wenn Borland/Embarcadero vierhundert verschiedene Dateiendungen und Dateitypen braucht/benutzt möchte ich mich damit eigentlich nicht beschäftigen müssen.



  • Vergleiche mal die Bibliothekspfade der Projekte. Das Verzeichnis, worin die benötigten Dateien sich befinden (*.lib und *.bpi), muß Teil des Bibliothekspfades sein, sonst findet der Linker die Dateien natürlich nicht.



  • Die Bibliothekspfade sind für alle drei Projekte (Testanwendung, statische lib, echte Anwendung) gleich:

    (BDS)\\lib (BDS)\lib\obj
    (BDS)\\lib\\psdk (BDS)\quickrpt
    $(BDS)\quickrpt\quickrpt
    e:\boost\boost_1_36_0\lib

    Ich denke nicht, dass es die Linkerpfade sind, ich vermute viel eher, dass der Linker nicht weiss, in welcher lib/bpi er nach dem Object Code suchen soll. Wenn ich ihm explizit sage, dass er sich gefälligst die TeePro811.lib (und einige andere) angucken und dort suchen soll verschwinden ja zumindest die TChart Linker Fehler.



  • Sooooo...

    Den Fehler konnte ich beheben, die Ursache habe ich allerdings nicht gefunden. In der .cbproj des "echten" Projekts standen im Knoten <AllPackageLibs> und <PackageImports> nur ein paar lib/bpi Einträge. Nachdem ich die Zeilen aus der TestAnwendung kopiert und dort eingefügt habe läuft auch der Linker durch. Fast jedenfalls, nun möchte er noch die Datei TRAYICON.RES haben. Nachdem ich eine Dummy .RES Datei umbenannt habe meckert er nun, dass die Resource doppelt vorhanden ist.
    Soweit ich weiss tritt dieser Fehler bei der Projektkonvertierung der bpr/bpg Dateien in das CG2007 Format auf, ich wundere mich nur, warum der Fehler bei mir auftritt, wo ich doch garnichts konvertiert, sondern die Projekte neu aufgebaut habe?!



  • Entschuldigung wenn ich störe... ich habe mal kurz eine Zwischenfrage: Für mich liest sich das hier so, als gebe es überall das QuickReport-Paket, nur für mein Borland C++ mit BDS2006 nicht!?
    @_DocShoe_: Hast du das käuflich erworben oder war das überall schon drin oder wie?

    MfG



  • Das QuickReports 4.07 Paket ist kein Bestandteil von CG2007, das hat die Firma extra kaufen müssen.



  • Danke für die Aufklärung, auch wenn es nicht die Antwort war, die ich mir erhofft hatte! 😉


Log in to reply