ich habe ein recht spezielles Anliegen, vielleicht kann mir ja einer helfen:
Ich habe eine externe Bibliothek (kommerzielles Produkt), sowohl als .so (shared object) für dynamic linking als auch als .a (als AR-Archiv, enthält insgesamt 6 .o Object-Dateien) für static linking. So weit die Beschreibung des Herstellers (dort natürlich alles für C erklärt).
Wunderbar funktioniert mit Lazarus, wenn ich die .so Datei dynamisch einbinde mit folgender Deklaration:
Code: Alles auswählen
Function GetVersionAPI : LongInt; cdecl; external 'libmxlin.so.2.6.0';
Nun möchte ich aber dieses Object (oder die 6 Object-Dateien) statisch in mein Lazarus-Programm einbinden, denn ich möchte nicht, dass der Benutzer (Kunde), sein System verändern muss (also als root die libmxlin.so.2.6.0 in /usr/lib kopieren, noch 2 symlinks drauf setzen, ldconfig ausführen ...).
Gefunden habe ich jede Menge beim wiki und in den Foren, aber es hilft mir nicht, denn folgende Probleme muss ich lösen:
1.) Wenn ich in der IDE "statisches Linken" einstelle, ¿wie kann ich verhindern, dass alle Objekte statisch gelinkt werden? Denn dann würde ja auch z.B. der ganze X11-Kram statisch gelinkt werden, also mehrere 100 MB.
http://www.lazarus.freepascal.org/index ... 954.0.html" onclick="window.open(this.href);return false;
2.) ¿Welche Compiler-Direktive muss ich setzen? {$LINK xyz} oder {$LINKLIB xyz}. Ich muss gestehen, die Erläuterungen
in http://www.freepascal.org/docs-html/pro ... 80001.1.43" onclick="window.open(this.href);return false; und
http://www.freepascal.org/docs-html/pro ... 60001.1.41" onclick="window.open(this.href);return false; habe ich nicht ganz kapiert.
3.) ¿Welche Datei(en ?) muss ich denn nun wo angeben? ¿ {$LINK libmxlin260.a} mit der Extension .a oder ohne? ¿und welche Dateien bei der external function Deklaration, auch die libmxlin260.a oder die einzelnen (ent-ar-kten), in dem Falle die mxapi.o?
Ich habe natürlich die verschiedensten Variationen durchprobiert, auch mit -Fo Pfade angegeben, die .a und .o Dateien nach /usr/lib kopiert (und mir mein System gut verknorzt, hähähä, aber macht ja nix...) ¡aber beim Lazarus funktioniert da nichts! Nur Fehlermeldungen "Error while linking ... /usr/bin/ld cannot find ...
Vielleicht wisst Ihr ja als langjährige Experten, wie man das macht,
schon mal recht vielen Dank