Error: Import library not found for xxx.lib ???

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Error: Import library not found for xxx.lib ???

Beitrag von thosch »

Hallo,

Ich habe ein Programm, das statische Bibliotheken verwendet und nun erhalte ich nach vollständiger Übersetzung meiner Software diese Fehlermeldung:

Error: Import library not found for xxx.lib ???

Was hat das zu bedeuten?

Ich dachte, meine xxx.lib sei meine Bibliothek und ich dachte, dass der Code statischer Bibliotheken ohnehin in den Code der lib Interfaceunits fest eingebaut werden.

In der Interface Unit steht zu Beginn:

Code: Alles auswählen

 
unit MeinLibInterface;
 
interface
 
uses
  // .... Units, die noch benötigt werden ....
 
{$Linklib xxx.lib}   
 
function libfunc1(param1,param2: Longint): Boolean; stdcall; external name 'libfunc1';
 
//weitere Funktionen folgen, wobei die Interface Unit nicht alle in der .lib vorhandenen Funktionen redefiniert
 
implementation
 
end.
 


Ich habe beim Übersetzen in der IDE den Pfad der .lib Datei(en) als Compileroption angegeben.

Und ich habe diese .lib Dateien nochmals im Ordner meiner .exe Datei liegen.

Wie kann ich nun erreichen, dass die Bibliotheken gefunden werden und eingebunden werden. Hier meckert ja schon der Compiler.

Was sind Importbibliotheken? Und was sind die .lib Dateien für Bibliotheken, wenn sie keine Importbibliotheken sind.

Wie muss ich im Endeffekt vorgehen, wenn ich die Funktonen die in den .lib Dateien codiert sind, für freepascal bekannt machen will?
.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Error: Import library not found for xxx.lib ???

Beitrag von fliegermichl »

Unter Windows sind die Bibliotheken in xxx.dll untergebracht.

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: Error: Import library not found for xxx.lib ???

Beitrag von thosch »

fliegermichl hat geschrieben:Unter Windows sind die Bibliotheken in xxx.dll untergebracht.


Auch statische Bibliotheken? Ich habe bei meiner konkreten Software nur die statischen Versionen. Sorry!

Ich dachte, .dll Dateien seien dynamische Bibliotheken. (D)ynamic (L)ink (L)ibrary.

Ich hab doch in meiner Frage geschrieben, dass es mir hier um statische Bibliotheken geht und auch die darf ich laut GPL in meinen Code einlinken. Muss ggf. halt den Source der Bibliotheken mitliefern bei Verteilung der Software!

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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: Error: Import library not found for xxx.lib ???

Beitrag von af0815 »

Sind die xxx.lib Dateien im richtigen Format, das der fpc die überhaupt verarbeiten kann ?

Wenn du mit Lazarus arbeiten solltest, dann bitte im Meldungsfenster einmal mit mit Copy All/Original Messages die Meldungen ins Clipboard bringen und in einen normalen Texteditor einfügen. Damit bekommt man viel mehr informationen, als was Lazarus im Messagefenster anzeigt.

Ev. ein simples Beispiel mit der lib hier im Forum hochladen, dann kan man sich ein Bild davon machen. Nur Source und die eine lib bitte.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: Error: Import library not found for xxx.lib ???

Beitrag von thosch »

af0815 hat geschrieben:Sind die xxx.lib Dateien im richtigen Format, das der fpc die überhaupt verarbeiten kann ?

Wenn du mit Lazarus arbeiten solltest, dann bitte im Meldungsfenster einmal mit mit Copy All/Original Messages die Meldungen ins Clipboard bringen und in einen normalen Texteditor einfügen. Damit bekommt man viel mehr informationen, als was Lazarus im Messagefenster anzeigt.

Ev. ein simples Beispiel mit der lib hier im Forum hochladen, dann kan man sich ein Bild davon machen. Nur Source und die eine lib bitte.


Das muss ich prüfen. Welches Format ist denn überhaupt das richtige für Microsoft Betriebssysteme? Ein Beispiel folgt später

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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: Error: Import library not found for xxx.lib ???

Beitrag von af0815 »

Pures C interface, von dem man die headerdateien hat. 32 bit für 32 bit Fpc, bzw. 64 bit für 64 bit fpc - nona. Wenn die lib für C++ ist, muss man sich die C Version suchen, sofern vorhanden.

Über das bin ich gestern wieder mal gestolpert bei einer Dll mit der Bitness, habe eine 64bit cersion erwischt bei einem 32Bit Programm. :shock: :D
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

thosch
Beiträge: 324
Registriert: Mo 10. Jul 2017, 20:32

Re: Error: Import library not found for xxx.lib ???

Beitrag von thosch »

af0815 hat geschrieben:Pures C interface, von dem man die headerdateien hat. 32 bit für 32 bit Fpc, bzw. 64 bit für 64 bit fpc - nona. Wenn die lib für C++ ist, muss man sich die C Version suchen, sofern vorhanden.

Über das bin ich gestern wieder mal gestolpert bei einer Dll mit der Bitness, habe eine 64bit cersion erwischt bei einem 32Bit Programm. :shock: :D


Leider kein C/C++, sondern Assembler, aber im Kopf der Assemblerdateien steht. Wie könnte ich denn die C/C++ Headerdateien in den FPC Code im Ernstfall einbinden? Ich habe im Windows Code schon was gesehen wie:

Code: Alles auswählen

 
(*$HPPEMIT '// WINVER check BEGIN ' *)
(*$HPPEMIT '#if (WINVER < 0x0400)' *)
(*$HPPEMIT '#error WINVER < 0x0400' *)
(*$HPPEMIT '#endif' *)
(*$HPPEMIT '// WINVER check END. ' *)
(*$HPPEMIT '' *)
(*$HPPEMIT '// WIN2K SDK fixes BEGIN ' *)
(*$HPPEMIT '#ifndef WINTRUST_H' *)
(*$HPPEMIT '#include<wintrust.h>' *)
(*$HPPEMIT '#endif' *)
...
 


Muss ich dann also vor jede Zeile der C/C++ Headerdatei auf diese Weise die $HPPEMIT Anweisunf setzen?

Es gibt in meinem Assembler Quellcode zur Bibliothek neben .ASM Dateien auch eine .DEF und eine .RSP Datei. Wenn die benötigt werden, wie mache ich die dem Freepascal Compiler bekannt?


Die Aufrufkonvention in meinem .ASM Code ist stdcall.

Code: Alles auswählen

 
 
        .386
if ?FLAT
        .MODEL FLAT, stdcall
else
        .MODEL SMALL, stdcall
endif
...
 


Nein, ich meinte, welches Format die .lib Datei haben muss, damit sie überhaupt mit dem Freepascal Code verlinkt werden kann. (COFF, ELF, OMF, ...). Ist dieses notwendige .lib Format für alle von FPC unterstützten auch uralten Betriebssysteme gleich?

Welches ist es für Windows, WDOSX, GO32V2, ..., falls es nicht für alle Plattformen gleich ist? Ich habe noch alte DOS Programme, die ich gerne nach Windows portieren möchte. In den Neunzigern mal für GO32V2 geschrieben, da ist auch externer Assemblercode dabei. Vielleicht kann ich ja an mancher Stelle meinen Code so anpassen dass er auch unter Windows läuft und ich so nicht alles neu schreiben muss.

.

Antworten