AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[GNU/Linux, FPC] SO's einbinden

Ein Thema von implementation · begonnen am 10. Feb 2011 · letzter Beitrag vom 9. Apr 2011
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#1

[GNU/Linux, FPC] SO's einbinden

  Alt 10. Feb 2011, 19:22
Ich habe jetzt unter Linux mit dem FPC eine kleine Testbibliothek geschrieben:
Delphi-Quellcode:
// Cray.pas
library Cray;

uses CrayLib, CrayInter;

procedure println(s: pchar);
begin
   WriteLn(String(s));
end;

exports println;

end.
Wenn ich sie kompiliere kommt auch wie gewünscht die 'libCray.so' raus.

Nun möchte ich sie einbinden:
Delphi-Quellcode:
// Crayfish.pas
unit Crayfish;

interface

uses CrayInter;

procedure println(s: pchar); external 'Crayname 'println';

implementation

end.

// CrayExample.pas
program CrayExample;

uses Crayfish, CrayInter;

begin
   println('o.O');
end.
Ich kompiliere CrayExample und starte es.
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
Als Sicherheitsmaßnahme ist es wohl sinnvoll, das verstehe ich ja.

Gibt es sonst keine andere Möglichkeit?

Geändert von implementation (10. Feb 2011 um 19:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

AW: [GNU/Linux, FPC] SO's einbinden

  Alt 10. Feb 2011, 19:54
Hi,

habe auch nicht so die Ahnung davon, aber vielleicht hilft ldconfig wie hier beschrieben weiter?

HTH
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#3

AW: [GNU/Linux, FPC] SO's einbinden

  Alt 10. Feb 2011, 20:09
Sieht ganz interessant aus.

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.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.292 Beiträge
 
Delphi XE7 Professional
 
#4

AW: [GNU/Linux, FPC] SO's einbinden

  Alt 10. Feb 2011, 20:30
Guten Abend,

Vielleich kannst Du ja den LD_LIBRARY_PATH für Deine Userkennung erweitern.

Grüße
Klaus
Klaus

Geändert von Klaus01 (11. Feb 2011 um 08:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.716 Beiträge
 
Delphi XE Professional
 
#5

AW: [GNU/Linux, FPC] SO's einbinden

  Alt 10. Feb 2011, 21:04
Hi,

war das nicht genau das, was man nicht tun sollte?


LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#6

AW: [GNU/Linux, FPC] SO's einbinden

  Alt 10. Feb 2011, 21:36
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.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#7

AW: [GNU/Linux, FPC] SO's einbinden

  Alt 11. Feb 2011, 09:46
Hi,

war das nicht genau das, was man nicht tun sollte?

LG, Frederic
Natürlich ist das ein Sicherheitsrisiko, einen Pfad hinzuzufügen, für den man keine Admin-Berechtigung benötigt.
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.
Guten Abend,

Vielleich kannst Du ja den LD_LIBRARY_PATH für Deine Userkennung erweitern.

Grüße
Klaus
Ist das eine Umgebungsvariable? Bei mir gibt's die irgendwie nicht
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.716 Beiträge
 
Delphi XE Professional
 
#8

AW: [GNU/Linux, FPC] SO's einbinden

  Alt 11. Feb 2011, 18:10
Hi,

ein

Code:
export LD_LIBRARY_PATH=Pfad/zur/so:$LD_LIBRARY_PATH
auf der Console sollte es eigentlich tun.


LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.175 Beiträge
 
#9

AW: [GNU/Linux, FPC] SO's einbinden

  Alt 11. Feb 2011, 20:10
Werden Bibliotheken etwa nur dort erkannt?
Das läßt sich einstellen. Siehe: man ld.so

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:
#!/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
Vereinfacht kannste auf der Shell auch das machen:

Code:
LD_PRELOAD=./libCray.so ./CrayExample
Wie gesagt, RTFM: man ld.so
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.175 Beiträge
 
#10

AW: [GNU/Linux, FPC] SO's einbinden

  Alt 11. Feb 2011, 20:16
Kleiner Hinweis noch zu der Syntax. Wenn in einem (Bash)Skript (andere Shells haben zT andere Syntax) benutzt, wird:
Code:
VARIABLE=WERT
die Umgebungsvariablen nur innerhalb des Skripts beeinflussen. Danach kann man entweder explizit:
Code:
export VARIABLE
ausführen, was die portablere Variante ist von (Bash):
Code:
export VARIABLE=WERT
Solange du das Skript (bspw. foo.sh) nicht "sourcst" ("to source"), also
Code:
source foo.sh
# ... oder
. foo.sh
... ausführst, wird die Umgebung deiner aktuellen Shellsitzung nicht beeinflußt.

Verkürzt geht auch:
Code:
VARIABLE=WERT PROGRAMM
welches die VARIABLE auf WERT setzt und zwar einzig für diesen Aufruf von PROGRAMM.

Subshells sind dann eventuell für diverse Sachen auch sinnvoll ...
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf