statische Bibliotheken werden nicht gefunden, warum? FPC304
statische Bibliotheken werden nicht gefunden, warum? FPC304
Ich kämpfe derzeit mit der Verlinkung statischer Bibliotheken für mein Projekt, von dem ich diese Bibliotheken leider nur in Binärform habe. Sie ligen im COFF Format vor, was das passende Format sein sollte.
Ich habe die fraglichen Bibliotheken sowohl im Projektpfad als auch im bin Pfad des Compilers und noch einmal in einem in der IDE bekennt gemachten Pfad meines Projektes liegen.
Trotzdem sagt mit der Compiler, er könne den Bibliothekspfad nicht finden. -lxxx.lib not found.
Den lib Pfad in der $Linklib xxx.lib Anweisung mit angeben führt nicht zum gewünschten Ergebnis.
Was kann ich tum damit meine statischen Bibliotheken korrekt in meinen Code gelinkt werden?
Ich compiliere mit FPC 3.0.4
Sollte ich die Version 3.0.0 oder niedriger verwenden?
Oder liegt eine andere Ursache vor?
Ich habe leider keine DLLs dazu, nur statische Bibliotheken und die nur im Binärcode.
.
Ich habe die fraglichen Bibliotheken sowohl im Projektpfad als auch im bin Pfad des Compilers und noch einmal in einem in der IDE bekennt gemachten Pfad meines Projektes liegen.
Trotzdem sagt mit der Compiler, er könne den Bibliothekspfad nicht finden. -lxxx.lib not found.
Den lib Pfad in der $Linklib xxx.lib Anweisung mit angeben führt nicht zum gewünschten Ergebnis.
Was kann ich tum damit meine statischen Bibliotheken korrekt in meinen Code gelinkt werden?
Ich compiliere mit FPC 3.0.4
Sollte ich die Version 3.0.0 oder niedriger verwenden?
Oder liegt eine andere Ursache vor?
Ich habe leider keine DLLs dazu, nur statische Bibliotheken und die nur im Binärcode.
.
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: statische Bibliotheken werden nicht gefunden, warum? FPC
Arbeitest du mit Lazarus ? Oder direkt mit dem FPC.
Wenn mit Lazarus, dann bitte mal die ganze Ausgabe aus dem Meldungsfenster posten. Und nicht die was angezeigt wird, sondern die die über rechte Maustaste im Meldungsfenster->Save all/original messages to File ausgegeben wird.
Ich gehe davon aus, da du dll schreibst, das du unter Windows arbeitest. Nur du sagt weder was über Win 32 oder 64 noch sonstwas.
Nach deinen Angaben sagt meine Glaskugel -> andere Ursache.
Wenn mit Lazarus, dann bitte mal die ganze Ausgabe aus dem Meldungsfenster posten. Und nicht die was angezeigt wird, sondern die die über rechte Maustaste im Meldungsfenster->Save all/original messages to File ausgegeben wird.
Ich gehe davon aus, da du dll schreibst, das du unter Windows arbeitest. Nur du sagt weder was über Win 32 oder 64 noch sonstwas.
Nach deinen Angaben sagt meine Glaskugel -> andere Ursache.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: statische Bibliotheken werden nicht gefunden, warum? FPC
aktuell direkt mit dem FPC auch Kommandozeilenebene.
Muss ich meine .lib Dateien vielleicht in .a Dateien Konvertieren?
Wenn ja, mit welchem Tool mache ich das und wenn das ein Kommandozeilentool ist, wie sieht die Kommandozeile samt korrekter Kommandozeilenschalter aus?
Ich arbeite unter Windows 32 Bit.
Leider ist das ein Projekt meiner beruflichen Arbeit, da darf ich hier nichts preis geben. Sonst gerne.
Es geht mir darum, zu erfahren warum die mit
{$Linklib XXX.LIB}
oder
{$Linklib c:\myProject\libs\yyy.lib}
im Unitkopf im Interface Teil deklarierten Bibliotheken vom Compiler nicht gefunden werden. Sollte das wirklich so sehr Projektspezifisch sein. Bei jedem Projekt eine andere Vorgehensweise. Gibt es da wirklich keine Standardlösung, die immer funktioniert?
Soweit ich weiß, sind .LIB Bibliotheken statische Bibliotheken. Wir haben uns für diese Variante entschieden, weil die dynamischen Bibliotheken für unseren Anforderungsfall zu viele Unwägbarkeiten bergen. Stichwort dynamische Arrays oder Strings ...
.
Muss ich meine .lib Dateien vielleicht in .a Dateien Konvertieren?
Wenn ja, mit welchem Tool mache ich das und wenn das ein Kommandozeilentool ist, wie sieht die Kommandozeile samt korrekter Kommandozeilenschalter aus?
Ich arbeite unter Windows 32 Bit.
Leider ist das ein Projekt meiner beruflichen Arbeit, da darf ich hier nichts preis geben. Sonst gerne.
Es geht mir darum, zu erfahren warum die mit
{$Linklib XXX.LIB}
oder
{$Linklib c:\myProject\libs\yyy.lib}
im Unitkopf im Interface Teil deklarierten Bibliotheken vom Compiler nicht gefunden werden. Sollte das wirklich so sehr Projektspezifisch sein. Bei jedem Projekt eine andere Vorgehensweise. Gibt es da wirklich keine Standardlösung, die immer funktioniert?
Soweit ich weiß, sind .LIB Bibliotheken statische Bibliotheken. Wir haben uns für diese Variante entschieden, weil die dynamischen Bibliotheken für unseren Anforderungsfall zu viele Unwägbarkeiten bergen. Stichwort dynamische Arrays oder Strings ...
.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: statische Bibliotheken werden nicht gefunden, warum? FPC
Hi
Hier ist ne Seite über Free Pascal und Libraries - leider nur auf english.
Von stastischem Linken von statischen Libs steht da nix, aber von statischem Linken von dynamischen Libs.
Vielleicht hilft's ja.
Hier:
https://wiki.freepascal.org/Lazarus/FPC_Libraries
Winni
Hier ist ne Seite über Free Pascal und Libraries - leider nur auf english.
Von stastischem Linken von statischen Libs steht da nix, aber von statischem Linken von dynamischen Libs.
Vielleicht hilft's ja.
Hier:
https://wiki.freepascal.org/Lazarus/FPC_Libraries
Winni
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: statische Bibliotheken werden nicht gefunden, warum? FPC
Es sollte schon xxx.lib richtig sein.
Was man mal machen kann, mit einem depency walker bzw. spezial Tool wie den CFF Explorer sich die Lib auch ansehen. Nicht das die für Dot-Net ist. Dann geht nichts aufgrund des Managed Code.
Code: Alles auswählen
Windows .dll .lib
Code: Alles auswählen
Windows searches a library in:
first in the current directory
then the system directory
finally the directories specified in the environment variable PATH (system and user path).
- Dateianhänge
-
- Beispiel wie es nicht ausehen sollte
- Anmerkung 2020-03-18 185920.jpg (81.02 KiB) 2351 mal betrachtet
Zuletzt geändert von af0815 am Mi 18. Mär 2020, 19:09, insgesamt 1-mal geändert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: statische Bibliotheken werden nicht gefunden, warum? FPC
Hallo!
Hier ist eine Discussion in der geklärt wird, wie man statische Bibliotheken an fpc code bindet.
Von 2017 - also klappte das schon damals:
https://fpc-devel.freepascal.narkive.co ... on-windows
Winni
Hier ist eine Discussion in der geklärt wird, wie man statische Bibliotheken an fpc code bindet.
Von 2017 - also klappte das schon damals:
https://fpc-devel.freepascal.narkive.co ... on-windows
Winni
Re: statische Bibliotheken werden nicht gefunden, warum? FPC
Danke für Eure Hilfe! Sorry für die späte Rückmelgung. Musste erst mal die verlikten Anleitungen studieren und meinen Quellcode anpassen.
Was ich aber noch nicht in den Anleitungen gefunden habe ist die Frage, ob ich eine Objektdatei die mehrere Funktionen enthält mehrmals, also unter jeder diese Objektdatei benutzenden Funktion erneut aufführen muss oder ob es ausreicht, die jeweilige Objektdatei ein einziges Mal zu verlinken.
Also so:
Oder so:
Welche Version muss ich wählen, damit der Linker korrekt arbeiten kann?
Will mich da vorher informieren, da hier noch mal ne Menge Arbeit auf mich zukommt. Ich musste erfahren, dass .LIB Dateien nicht verlinkt werden können, ich brauche die Objektdateien, die ich jetzt aus den Libs extrahiert habe. Da will ich bvor ich mich nun noch mal an die Arbeit mache, wissen wie ich die .o Dateien nun richtig im Quellcode aufführe, damit danach dann das Linken endlich klappt.
.
Was ich aber noch nicht in den Anleitungen gefunden habe ist die Frage, ob ich eine Objektdatei die mehrere Funktionen enthält mehrmals, also unter jeder diese Objektdatei benutzenden Funktion erneut aufführen muss oder ob es ausreicht, die jeweilige Objektdatei ein einziges Mal zu verlinken.
Also so:
Code: Alles auswählen
function myfunc1(param: Integer): Integer; stdcall external name '_myfunc1@4
{$L func1fun2func3.o}
function myfunc2(param1: PChar; Param2: UINT): DWORD; stdcall '_myfunc2@8';
{$L func1fun2func3.o}
function myfunc3: PChar; stdcall; external name '_myfunc3@0';
{$L func1fun2func3.o}
Code: Alles auswählen
{$L func1fun2func3.o}
function myfunc1(param: Integer): Integer; stdcall external name '_myfunc1@4
function myfunc2(param1: PChar; Param2: UINT): DWORD; stdcall '_myfunc2@8';
function myfunc3: PChar; stdcall; external name '_myfunc3@0';
Will mich da vorher informieren, da hier noch mal ne Menge Arbeit auf mich zukommt. Ich musste erfahren, dass .LIB Dateien nicht verlinkt werden können, ich brauche die Objektdateien, die ich jetzt aus den Libs extrahiert habe. Da will ich bvor ich mich nun noch mal an die Arbeit mache, wissen wie ich die .o Dateien nun richtig im Quellcode aufführe, damit danach dann das Linken endlich klappt.
.
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: statische Bibliotheken werden nicht gefunden, warum? FPC
Du musst die Objekt-Datei nur einmal in dein Programm linken und kannst dann alle Funktionen daraus nutzen. Ansonsten wüsste der Linker wohl nicht, welche Funktion aus welcher Objektdatei er aufrufen sollte - obwohl sie identisch sind - und ich wüsste auch nicht, wie man ihm das sagen sollte.thosch hat geschrieben:Was ich aber noch nicht in den Anleitungen gefunden habe ist die Frage, ob ich eine Objektdatei die mehrere Funktionen enthält mehrmals, also unter jeder diese Objektdatei benutzenden Funktion erneut aufführen muss oder ob es ausreicht, die jeweilige Objektdatei ein einziges Mal zu verlinken.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein