Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   BCB: Was macht der Linker falsch? (https://www.delphipraxis.net/107864-bcb-macht-der-linker-falsch.html)

messie 3. Feb 2008 19:33


BCB: Was macht der Linker falsch?
 
Moin,

ich habe mal versucht, den BCB6 auf einen neuen PC zu installieren. Das geht, inklusive ServicePack4 und neuen Ilink32 (darauf werde ich noch in einem anderen Thread hinweisen) ganz gut.
Bei der Installation des Alphacontrols-Package bekomme ich Linker-Fehler, von denen ich gerne wissen würde, wie sie entstehen.

z.B.
Code:
[Linker Error] Unresolved external '__fastcall Acutils::NormalDir(const System::WideString)' referenced from SINTERNALSKINS.OBJ
Sehe ich mir die sInternalskins.pas an, wird dort tatsächlich NormalDir verwendet allerdings wird dort ein String übergeben. Das könnte der Fehler schon sein. Merkwürdig finde ich aber auch, dass in der Acutils.pas
Delphi-Quellcode:
function NormalDir(const DirName: ACString): ACString;
steht, in der eben bei der Package-Installation erzeugten Acutils.hpp dann
Code:
extern PACKAGE WideString __fastcall NormalDir(const WideString DirName);
steht.
Ist dieser hpp-Eintrag mit WideString durch eine Referenz auf ACString verursacht?

Ein wenig Klarheit würde mir sehr helfen.

Danke, Messie

DMW 3. Feb 2008 19:51

Re: BCB: Was macht der Linker falsch?
 
Wie lautet denn die Definition von ACString?

Mark90 3. Feb 2008 20:08

Re: BCB: Was macht der Linker falsch?
 
bei mir kam auch immer ein LINKER-ERROR(der selbe wie oben). dieser kam jedoch nur, wenn ich die projektdateien verschoben habe. als ich mein BCB geupdated habe, war dieses problem behoben.

messie 3. Feb 2008 20:17

Re: BCB: Was macht der Linker falsch?
 
Die Definition von ACString habe ich noch nicht gefunden (noch kein Delphi installiert).
Projektdateien habe ich noch gar keine in Gebrauch, bin noch mit dem nackten BCB zugange.

Grüße, Messie

SirThornberry 3. Feb 2008 20:18

Re: BCB: Was macht der Linker falsch?
 
die Meldung sagt doch alles. Die extern declaration ist vorhanden aber die Implementation wird nicht gefunden. Sowas tritt eigentlich immer dann auf wenn die entsprechenden C-Dateien nicht mit gelinkt werden und somit die implementation nicht gefunden wird.

Muetze1 3. Feb 2008 20:32

Re: BCB: Was macht der Linker falsch?
 
Bzw. einfach nur die entsprechende .LIB Datei nicht ins Projekt gezogen wurde...

messie 3. Feb 2008 20:41

Re: BCB: Was macht der Linker falsch?
 
Zitat:

Zitat von SirThornberry
die Meldung sagt doch alles. Die extern declaration ist vorhanden aber die Implementation wird nicht gefunden. Sowas tritt eigentlich immer dann auf wenn die entsprechenden C-Dateien nicht mit gelinkt werden und somit die implementation nicht gefunden wird.

:wiejetzt: Ich hab' ja für das Package nur eine einzige C-Datei und die wird mit gelinkt, sonst wären die Meldungen umfangreicher. Der Rest ist ja in den pas vorhanden und wird über die hpp beschrieben. Daraus werden dann vom Compiler die obj erstellt. Beim Linken werden die in der obj beschriebenen Funktionen in die exe gelinkt. So jedenfalls hab ich es verstanden. Um eine solche Meldung zu produzieren, muss es Abweichungen zwischen den beim Linken verwendeten Dateien geben, also nach meinem Verständnis zwischen hpp und obj.

Vielleicht kannst Du Deine Aussage ein wenig auf die verwendten Mechanismen bezogen erklären.

Grüße, Messie


OT: wir brauchen dringend noch ein :wiejetzt:, der genauso dumm guckt wie ich eben...

Muetze1 3. Feb 2008 22:17

Re: BCB: Was macht der Linker falsch?
 
Wenn du die Pascal Quellen direkt einbindest und keine LIB dazu hast, dann muss der LIB Suchpfad mit auf das Verzeichnis gesetzt werden, wo auch die OBJ liegen. Wenn du aber eine LIB Datei mit den Pascal quellen hast, dann ziehe diese .LIB per Drag & Drop vom Explorer auf das Projekt im Projektmanager, um es hinzu zu fügen.

Compiler hat alles geschluckt, nur sucht nun der Linker nach dem Kompilat mit der Funktion, somit gib ihm entweder die .OBJ oder die .LIB (welche die einzelnen OBJ beinhaltet).

messie 27. Mär 2008 16:30

Re: BCB: Was macht der Linker falsch?
 
Ich wollte das Ergebnis hier noch nachtragen:

Der mit BCB6 BCB X gelieferte Linker (ilink32.exe und ilink32.dll) ist fehlerhaft und muss durch ein Update ersetzt werden. Der Fehler tritt erst dann auf, wenn eine bestimmte Anzahl von gelinkten Komponenten überschritten wird. Dann geht gar nix mehr. Das wäre nicht so ein Problem, wenn das nur die Projekte betreffen würde. Üblicherweise überschreitet man die Grenze aber bei Kompilieren und Installieren von Komponenten zum ersten Mal.

Bei mir führte das dazu, dass die aufeinander aufbauenden Kompos (meist mit den TntTools unter der Haube) durch neues, fehlerhaftes Linken komplett Schrott waren. Also auch das Deinstallieren der zuletzt installierten Kompo hilft da nicht.

Ich habe beim Suchen keine Erklärung der Zusammenhänge gefunden und wollte das einfach nochmal dokumentieren. Vielleicht trägt noch jemand die Links zu den Artikeln nach...

Grüße, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz