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.

Was sind die Warnungen, die Sie bekommen, wenn die Zusammenstellung der ME-Paket?
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

Schreibe einen Kommentar