Fehler F2063 nicht kompilieren Konnte, verwendete Einheit (von abhängiges Paket)
Ich geschrieben habe 2 Pakete: MEComps_DXE5 und AMLComps_DXE5. Letzteres hängt vom ersteren. Beide sollten multi-Plattform: Win32, Win64, und (in Zukunft) für OSX.
Beim öffnen des ersten Pakets MEComps_DXE5, ich bin in der Lage, um es zu kompilieren, bauen und installieren Sie es. Ich bekomme einige Warnungen, wie diese Bibliothek, die code enthält, muss auch kompilieren auf alten D5, aber der build erfolgreich und schafft die dcu und die dcp-Dateien, in denen erwartet.
Wenn ich öffne das zweite Paket AMLComps_DXE5, ich finde diese situation:
- Wenn ich nicht erklären, die Abhängigkeit von MEComps_DXE5, wird das Paket zu kompilieren und korrekt (keine Fehler, dcu und die dcp-Dateien generiert werden), aber Delphi warnt mich, dass Sie implizit importierten Einheiten von MEComps_DXE5, und Fragen Sie mich, um das Paket hinzuzufügen, um die Liste von Abhängigkeiten (Benötigt)
- , Wenn die Abhängigkeit deklariert wird, dann ist die Kompilierung wird fehlschlagen, mit
"[dcc32 Fatal Error] MEComps_DXE5.dpk(52): F2063 Could not compile used unit 'MEClasses.pas'"
, wo MEClasses ist die erste Einheit der MEComps_DXE5 Paket.
Ich habe versucht, dies zu lösen, für ein paar Tage jetzt, aber ohne Erfolg. Ich arbeite an zwei Fronten:
- Warum ist Delphi auch nur zu versuchen, kompilieren Sie das andere Paket? Ich habe gerade gebaut und installiert haben, und alle dcus und des dcp.
- Warum ist die Zusammenstellung ausfällt?
Als zu der ersten Frage habe ich keine Ahnung.
Als auf die zweite Frage, die Dokumentation ist nutzlos in diesem Fall. Es erklärt, warum die nicht in der Lage zu kompilieren verwendete Einheit ist tödlich, und erklärt, dass die Ursache ermittelt, indem man die vorherigen Fehler. Aber in diesem Fall gibt es KEINE vorherigen Fehler.
Als MEComps_DXE5 eigentlich erstellt und baut auf seine eigene, ich bezweifle, das hat nichts zu tun mit der syntax oder code. Es scheint so zu sein, dass der compiler ist nicht in der Lage, etwas zu finden, die es braucht um zu kompilieren die Einheiten.
Den beiden Paketen befinden sich jeweils in Ihr eigenes Verzeichnis. Ich legte die MEComps\Win32 dcu-Verzeichnis auf den library-Pfad und auf dem Suchpfad. Die IDE hat eigentlich auch keine Probleme nach den verwendeten Einheiten.
Ich habe auch überprüft die dcc32-Kommandozeile und es scheint, dass alle beteiligte Verzeichnisse bekannt sind, die für den compiler.
Andere info, die ich hinzufügen können:
- Beide Pakete haben Ihre eigenen include-Datei (in Ihrem source-Verzeichnis). Ich bin mir nicht sicher, ob diese enthalten sind im Paket enthält Liste oder nicht, aber ich habe beide Wege ausprobiert und nichts schien sich zu ändern.
- Beide Pakete haben eine entsprechende Delphi-5-Paket enthält einige der gleichen Einheiten und code (verschiedene dpk). Diese kompilieren und korrekt. Delphi 5 dcu-Dateien generiert, die in das source-Verzeichnis. Kann dies zu Problemen mit der XE5-compiler?
- Hier ist der vollständige code für die MEComps_DXE5 Paket. Ich sehe eine Menge von compiler-Direktiven, Delphi eingefügt werden, wenn es erstellt das leere Paket. Ich habe nicht berühren jene:
Paket MEComps_DXE5;
{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}
requires
rtl,
fmx,
dbrtl,
xmlrtl;
contains
MEClasses in 'MEClasses.pas',
MEConsts in 'MEConsts.pas',
MEDataReader in 'MEDataReader.pas',
MEDateUtils in 'MEDateUtils.pas',
MEEncoding in 'MEEncoding.pas',
MEEncodingISO2022 in 'MEEncodingISO2022.pas',
MEFileUtils in 'MEFileUtils.pas',
MELists in 'MELists.pas',
MEMath in 'MEMath.pas',
MENumUtils in 'MENumUtils.pas',
MESQLUtils in 'MESQLUtils.pas',
MEStrUtils in 'MEStrUtils.pas',
MESysUtils in 'MESysUtils.pas',
METypes in 'METypes.pas',
MEURIUtils in 'MEURIUtils.pas',
MEXMLUtils in 'MEXMLUtils.pas';
end.
Meist implizite-Typkonvertierung-String<->WideString und Char<->Variable vom Typ WideChar. Plus einige Dinge, die ok mit D5, aber verbitten sich in DXE5 (wie MaxListSize). Ich werde lösen diese mit der Zeit, aber ich bin sicher, diese haben nichts zu tun mit dem problem bei der hand, da MEComps kompiliert auf seine eigenen.
OK, dann ist es wahrscheinlich nicht relevant für das problem. Aber wie weiß der compiler wissen, dass Sie Einheiten aus der ME-Paket und sagt, dass Sie auf ihn verweisen, wenn Sie kompilieren den AML-Paket? Ich weiß nicht Recht bekommen.
Ich verstehe nicht ganz, dieser. Der compiler weiß offensichtlich die uses-Klauseln habe ich in den AML-Paket. Was ich wirklich nicht bekommen, ist, warum nicht es darauf bestehen zu wollen, kompilieren Sie die Einheiten, obwohl das Paket bereits korrekt gebaut. Jedenfalls, jetzt scheint alles korrekt zu funktionieren (befolgt die akzeptierte Antwort), obwohl ich finde es ein bisschen fummelig.
InformationsquelleAutor Frazz | 2015-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Delphi-IDE ist bei weitem nicht perfekt, wenn es darum geht, zu editieren/kompilieren von Paketen, aber Sie lösen das problem auf Ihrer Seite - konfigurieren Sie Ihre Pakete besser und Delphi kompilieren Sie richtig.
Ich kann Ihnen nur Allgemeine Hinweise Adressierung die info gegeben:
Wenn Sie brauchen eine gemeinsame include-Datei für 2 Pakete erstellen Sie ein separates Verzeichnis für die Datei und fügen Sie das Verzeichnis zu den Suchpfaden der beiden Pakete (in
Base
build-Konfiguration).Nie halten .dcu ist im gleichen Ordner mit Quelldateien; immer "unit output directory" - option für die Pakete (auch in
Base
build-Konfiguration); ich empfehle$(BDSCOMMONDIR)\MyPacks\$(Config)\$(Platform)
als solche-Verzeichnis für die Pakete, wenn Sie bereits haben .dcu ' s in der Quelle (.pas) Ordner löschen, egal welche Delphi-version diese erstellt .dcu ist.Nie neue Pfade für abhängige Paket - Quellen für die Suche Weg, nur Pfade zusammengestellt .dcu ' s (wäre
$(BDSCOMMONDIR)\MyPacks\$(Config)\$(Platform)
wenn Sie nach vorheriger Beratung).Weder noch. Library-Pfad ist für .dcu ist, aber ich lieber nicht, es überhaupt zu verwenden; Durchsuchen Pfad für die Quellen, aber es wird von der IDE-editor, nicht durch den compiler.
Sie benötigen zum kompilieren der Pakete ist festgelegt "Suchpfad" und "unit output directory" - Optionen der Pakete.
Ich nahm diese Antwort als die Trennung der Quellen, aus der dcus scheint getan haben, der trick. Nicht die Quellen der library-Pfad ist ein bisschen wie ein PITA aber, wie ich immer Gefahr, zu debug-dcu, entspricht nicht den Quellen und ich habe zu bauen und installieren Sie das Paket auch einfach nur zum ausführen der unit-tests 🙁
InformationsquelleAutor kludg