![]() |
[GNU/Linux, FPC] SO's einbinden
Ich habe jetzt unter Linux mit dem FPC eine kleine Testbibliothek geschrieben:
Delphi-Quellcode:
Wenn ich sie kompiliere kommt auch wie gewünscht die 'libCray.so' raus.
// Cray.pas
library Cray; uses CrayLib, CrayInter; procedure println(s: pchar); begin WriteLn(String(s)); end; exports println; end. Nun möchte ich sie einbinden:
Delphi-Quellcode:
Ich kompiliere CrayExample und starte es.
// Crayfish.pas
unit Crayfish; interface uses CrayInter; procedure println(s: pchar); external 'Cray' name 'println'; implementation end. // CrayExample.pas program CrayExample; uses Crayfish, CrayInter; begin println('o.O'); end. Nun kommt jedoch die Meldung, libCray.so könne nicht gefunden werden. Die SO liegt im gleichen Verzeichnis. Woran liegt das? [EDIT] Habe jetzt die libCray.so mal nach /lib verschoben. Jetzt funktioniert's. Werden Bibliotheken etwa nur dort erkannt? Na das macht das Debuggen ja nicht gerade einfacher, wenn man sich nach jeder Kompilierung erstmal ein sudo erkämpfen muss, um die Bibliothek zu verschieben :wall: Als Sicherheitsmaßnahme ist es wohl sinnvoll, das verstehe ich ja. Gibt es sonst keine andere Möglichkeit? |
AW: [GNU/Linux, FPC] SO's einbinden
Hi,
habe auch nicht so die Ahnung davon, aber vielleicht hilft ldconfig wie ![]() HTH |
AW: [GNU/Linux, FPC] SO's einbinden
Sieht ganz interessant aus.:-D
Funktioniert nur noch nicht so ganz bei mir :? Habe den Pfad eingetragen und ldconfig drüberlaufen lassen. Aber die SO ist trotzdem noch nicht gefunden. |
AW: [GNU/Linux, FPC] SO's einbinden
Guten Abend,
Vielleich kannst Du ja den LD_LIBRARY_PATH für Deine Userkennung erweitern. Grüße Klaus |
AW: [GNU/Linux, FPC] SO's einbinden
Hi,
war das nicht genau das, was man nicht tun sollte? LG, Frederic |
AW: [GNU/Linux, FPC] SO's einbinden
Zum Testen und Entwickeln von Software ist das IMHO legitim.
Auch die Betas von Firefox machen das z.B. so: Lädt man sich ein Binärpaket davon herunter, so ist dem eigentlichen "firefox-bin"-Executable ein "firefox"-Bash-Script vorgeschaltet, dass LD_LIBRARY_PATH entsprechend setzt. |
AW: [GNU/Linux, FPC] SO's einbinden
Zitat:
Das macht es Schadsoftware leichter. Aber beim Entwickeln ist es wirklich lästig, dauernd die SO nach /lib kopieren zu müssen und daher gehe ich das Risiko halt ein. Zitat:
|
AW: [GNU/Linux, FPC] SO's einbinden
Hi,
ein
Code:
auf der Console sollte es eigentlich tun.
export LD_LIBRARY_PATH=Pfad/zur/so:$LD_LIBRARY_PATH
LG, Frederic |
AW: [GNU/Linux, FPC] SO's einbinden
Zitat:
Am besten nimmst du ein Wrapper-Skript. Ich nehme an, daß deine Anwendung CrayExample heißt und die .so libCray.so. Desweiteren nehmen wir an, daß .so und Binary im gleichen Verzeichnis liegen:
Code:
Vereinfacht kannste auf der Shell auch das machen:
#!/usr/bin/env bash
# Hier den Pfad zu deinem Programm CRAY_APP=/home/bla/foo/bar/CrayExample LD_PRELOAD=`dirname $CRAY_APP`/libCray.so $CRAY_APP
Code:
Wie gesagt, RTFM: man ld.so :zwinker:
LD_PRELOAD=./libCray.so ./CrayExample
|
AW: [GNU/Linux, FPC] SO's einbinden
Kleiner Hinweis noch zu der Syntax. Wenn in einem (Bash)Skript (andere Shells haben zT andere Syntax) benutzt, wird:
Code:
die Umgebungsvariablen nur innerhalb des Skripts beeinflussen. Danach kann man entweder explizit:
VARIABLE=WERT
Code:
ausführen, was die portablere Variante ist von (Bash):
export VARIABLE
Code:
Solange du das Skript (bspw. foo.sh) nicht "sourcst" ("to source"), also
export VARIABLE=WERT
Code:
... ausführst, wird die Umgebung deiner aktuellen Shellsitzung nicht beeinflußt.
source foo.sh
# ... oder . foo.sh Verkürzt geht auch:
Code:
welches die VARIABLE auf WERT setzt und zwar einzig für diesen Aufruf von PROGRAMM.
VARIABLE=WERT PROGRAMM
Subshells sind dann eventuell für diverse Sachen auch sinnvoll ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz