AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL unter LINUX , Deploy prozess

Ein Thema von bernhard_LA · begonnen am 25. Mai 2020 · letzter Beitrag vom 11. Jul 2020
Antwort Antwort
Seite 1 von 2  1 2      
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

DLL unter LINUX , Deploy prozess

  Alt 25. Mai 2020, 16:30
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
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DLL unter LINUX , Deploy prozess

  Alt 28. Mai 2020, 23:54
ping - kann jemand helfen , wie muss ich richtig einbinden, welcher Name ???
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#3

AW: DLL unter LINUX , Deploy prozess

  Alt 29. Mai 2020, 00:01
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 external 'TestLibrary.so' .

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: DLL unter LINUX , Deploy prozess

  Alt 29. Mai 2020, 01:39
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.

Geändert von Harry Stahl (29. Mai 2020 um 01:48 Uhr)
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: DLL unter LINUX , Deploy prozess

  Alt 29. Mai 2020, 15:13
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) ?
Miniaturansicht angehängter Grafiken
delphijpg.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: DLL unter LINUX , Deploy prozess

  Alt 29. Mai 2020, 16:21
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).
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: DLL unter LINUX , Deploy prozess

  Alt 29. Mai 2020, 17:41
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 ?



[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
Miniaturansicht angehängter Grafiken
delphi2.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: DLL unter LINUX , Deploy prozess

  Alt 29. Mai 2020, 18:03
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.
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: DLL unter LINUX , Deploy prozess

  Alt 30. Mai 2020, 00:22
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
Miniaturansicht angehängter Grafiken
delphi3.jpg  

Geändert von bernhard_LA (30. Mai 2020 um 01:27 Uhr)
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: DLL unter LINUX , Deploy prozess

  Alt 30. Mai 2020, 01:26
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 ?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 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