Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   DLL unter LINUX , Deploy prozess (https://www.delphipraxis.net/204383-dll-unter-linux-deploy-prozess.html)

bernhard_LA 25. Mai 2020 15:30

DLL unter LINUX , Deploy prozess
 
ich möchte eine Anwendung incl. DLLs nach LINUX portieren
beim Deploy bekomme ich folgende Fehlermeldung :

Delphi-Quellcode:
[DCC Error] E2597 C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\ld-linux.exe: error: cannot find -lTestLibrary.so
....
error: undefined reference to 'AddIntegers'
der Delphi Code hierzu :


Delphi-Quellcode:
var
  Form1: TForm1;

{$IFDEF MSWINDOWS}
function AddIntegers(_a, _b: integer): integer; stdcall; external 'TestLibrary.dll';
{$ENDIF}

{$IFDEF LINUX}
  function AddIntegers(_a, _b: integer): integer; stdcall; external '-lTestLibrary.so';
{$ENDIF}

implementation


procedure TForm1.btn_helpmeClick(Sender: TObject);
var c : Integer ;
begin

     c := AddIntegers(1,2);
     mmo_xml.lines.add (Inttostr(c));
end;

Frage :
a) welchen Namen muss ich für meine DLL auf der UNIX/LINUX Seite angeben ?
TestLibrary
libTestLibrary.so
ging nicht ?
b) ich welcher Reihenfolge muss ich Deployen?
Die DLL also Shared Object ist schon auf meinem Linux Rechner im entsprechenden Unterordner

bernhard_LA 28. Mai 2020 22:54

AW: DLL unter LINUX , Deploy prozess
 
ping - kann jemand helfen , wie muss ich richtig einbinden, welcher Name ???

Dalai 28. Mai 2020 23:01

AW: DLL unter LINUX , Deploy prozess
 
Ist nicht der Parameter -lTestLibrary.so der Schalter -l plus Argument TestLibrary.so? Eigentlich heißen Libraries unter Linux libirgendwas.so, nicht -llibirgendwas.so. Kurz gesagt: Probier mal
Delphi-Quellcode:
external 'TestLibrary.so'
.

Grüße
Dalai

Harry Stahl 29. Mai 2020 00:39

AW: DLL unter LINUX , Deploy prozess
 
Zu a) Die Datei sollte heißen "libTestlibrary.so"

Am einfachsten ist es, die Datei in das gleiche Verzeichnis wie die Binary zu deployen.

Da Du ja hier eine Hart-Codierung für den Bezug zur DLL (bzw. ".so") gewählt hast, compiliert der Compiler die Adressen zu den Funktionen in der DLL "hart" in Dein Programm ein.

Dazu muss der Compiler zum Kompilierzeitpunkt wissen, wo Deine DLL liegt. Dummerweise sucht er nicht einfach dort da, wo auch die Binary erzeugt wird. Man muss (auch seltsam, aber so funktioniert es) unter Tools, im Bibliothekspfad das Verzeichnis angeben, wo Deine DLL (also .so) liegt.

Zu Deiner Frage b) verstehe ich Deine Frage nicht ganz. Welche DLL Shared Object ist gemeint? Falls Du da die Borland shared memory dll meinst (BORLNDMM.DLL), das ist eine reine Windows-Dll, die kannst Du unter Linux nicht verwenden.

bernhard_LA 29. Mai 2020 14:13

AW: DLL unter LINUX , Deploy prozess
 
Liste der Anhänge anzeigen (Anzahl: 1)
OK, dann sollte die Namensgebung so korrekt sein

Delphi-Quellcode:
{$IFDEF MSWINDOWS}
function AddIntegers(_a, _b: integer): integer; stdcall; external 'TestLibrary.dll';
{$ENDIF}


{$IFDEF LINUX}
  function AddIntegers(_a, _b: integer): integer; stdcall; external 'libTestLibrary.so';
{$ENDIF}
muss ich jetzt meinen Suchpfad um die Project Datei der DLL erweitern ( war bei meinem Test nicht erfolgreich) oder um dem Pfad auf dem LINUX Zielsystem ( WIN und LINUX Pfade mischen) ?

Harry Stahl 29. Mai 2020 15:21

AW: DLL unter LINUX , Deploy prozess
 
Zitat:

Zitat von bernhard_LA (Beitrag 1465822)
OK, dann sollte die Namensgebung so korrekt sein

Delphi-Quellcode:
{$IFDEF MSWINDOWS}
function AddIntegers(_a, _b: integer): integer; stdcall; external 'TestLibrary.dll';
{$ENDIF}


{$IFDEF LINUX}
  function AddIntegers(_a, _b: integer): integer; stdcall; external 'libTestLibrary.so';
{$ENDIF}
muss ich jetzt meinen Suchpfad um die Project Datei der DLL erweitern ( war bei meinem Test nicht erfolgreich) oder um dem Pfad auf dem LINUX Zielsystem ( WIN und LINUX Pfade mischen) ?

Ich habe es oben schon geschrieben, unter TOOLS (Optionen, Sprache, Delphi, Bibliothek) Bibliothekspfad.
Dort gibst Du den Pfad der DLL auf dem Windows-PC an. Auf dem Zielrechner (Linux) deployst Du Binary und .so-Datei in einen Ordner (da Du ja statisches Linken gewählt hast, sonst findet Dein Programm die .so Datei auch auf dem Linux-Rechner nicht).

bernhard_LA 29. Mai 2020 16:41

AW: DLL unter LINUX , Deploy prozess
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich habe jetzt den Pfad zur DLL im Library Search Pfad eingetragen, siehe screen dump ,
jetzt bekomme ich diesen linker Error, was mache ich noch falsch ?



Delphi-Quellcode:
[DCC Error] E2597 C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\ld-linux.exe: error: cannot open /lib/x86_64-linux-gnu/libc.so.6: No such file or directory

Harry Stahl 29. Mai 2020 17:03

AW: DLL unter LINUX , Deploy prozess
 
Existiert denn die Datei auf Deiner Linux-Maschine? Wenn nein (dafür spricht die Fehlermeldung), dann linux-gnu compiler installieren. Wenn ja, Linux-SDK-Cache in Delphi aktualisieren.

bernhard_LA 29. Mai 2020 23:22

AW: DLL unter LINUX , Deploy prozess
 
Liste der Anhänge anzeigen (Anzahl: 1)
Update #1 :


Update Systemcache und Bibliothekspfad leider ohne Erfolg durchgeführt , siehe screen dump

Die DLL konnte ich ohne Probleme compilieren und auf den UNIX Rechner Deployen.

Nach dem Cache Update befindet sich jetzt meine DLL auf meinem Windowsrechner im Verzeichnis :-)

C:\Users\bernhard\Documents\Embarcadero\Studio\SDK s\ubuntu18.04.sdk\home\bernhard\PAServer\scratch-dir\bernhard-Laptop TCP\TestLibrary


-> mache jetzt meine GNU compiler installation neu, nächster Schritt

bernhard_LA 30. Mai 2020 00:26

AW: DLL unter LINUX , Deploy prozess
 
Update #2

Neu-Installation GNU linux compiler durchgeführt (https://linuxize.com/post/how-to-ins...-ubuntu-18-04/ ) , keine Fehlermeldungen bekommen

die Datei libc.so.6 ist auf meinem Linux Rechner, Ordner C:\Users\bernhard\Documents\Embarcadero\Studio\SDK s\ubuntu18.04.sdk\lib\x86_64-linux-gnu


ich vermute ld-linux sucht immer im falschen Verzeichnis .... nur wie kann ich ihm sage wo er suchen soll ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.
Seite 1 von 2  1 2      

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