Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Für Fragen von Einsteigern und Programmieranfängern...
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von DL3AD »

Hallo,
habe folgendes Problem unter Linux.

Code: Alles auswählen

 
procedure TForm1.DBOn;
begin
  if FileExists('libsqlite3.so.0') then//Hier bei der Prüfung wird die lib nicht gefunden
  else
  begin
    ShowMessage('libsqlite3 not found !');
    Halt;
  end;
  if FileExists(Config.ReadString('Setup','Database','')) then
  begin
    ZConDB.Connected      := false;
    ZConDB.Database       := Config.ReadString('Setup','Database','');
    ZConDB.LibraryLocation:= 'libsqlite3.so.0';//Ohne die obige Prüfung kann er auf die lib hier zugreifen.
    ZConDB.Connected      := true;
    QueryLog.Active       := true;
  end
  else
  begin
    ShowMessage('Database not found !');
    Form1.Close;
  end;
end;               
 

Es wird bei der Prüfung auf die lib das nicht Vorhandensein festgestellt.
Ohne die Prüfung läuft die Anwendung aber.
Ziel der Prüfung ist wenn mal das Paket sqlite3 nicht installiert ist, die Anwendung mit Hinweis vor dem Abschmieren zu bewahren.

Was habe ich da falsch gemacht ?

Gruß Frank

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 988
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von kralle »

Moin,

es gibt für FileExist auch eine UTF-Version

Code: Alles auswählen

FileExistsUTF8
vielleicht hilft Dir das Weiter.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von DL3AD »

...FileExistsUTF8 war nicht die Lösung - Ich vermute es liegt daran dass libsqlite3.so.0 keine Datei sondern ein Link auf die aktuelle libsqlite ist.
Wie löse ich dass Problem ? :roll:

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 988
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von kralle »

OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von Epcop »

Zuerst das Arbeitsverzeichnis auf den aktuellen Ordner bzw. dort wo die Datei liegt setzen?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von mse »

DL3AD hat geschrieben:...FileExistsUTF8 war nicht die Lösung - Ich vermute es liegt daran dass libsqlite3.so.0 keine Datei sondern ein Link auf die aktuelle libsqlite ist.

Nein, es liegt daran, dass dlopen() die Systemumgebung abfragt, wo nach libraries gesucht werden soll:
http://man7.org/linux/man-pages/man3/dlopen.3.html
Warum fängst du nicht einfach die von Zeos geworfene exception ab und reagierst entsprechend?

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von DL3AD »

mse hat geschrieben:Warum fängst du nicht einfach die von Zeos geworfene exception ab und reagierst entsprechend?

... das mache ich ungern - das ist ja so - ich lasse es zu einem Unfall kommen und reagiere dann erst.
Zeos erkennt ja dass die lib da ist - also muss es ja auch eine Möglichkeit geben dass selbst festzustellen - oder ?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von mse »

DL3AD hat geschrieben:
mse hat geschrieben:Warum fängst du nicht einfach die von Zeos geworfene exception ab und reagierst entsprechend?

... das mache ich ungern - das ist ja so - ich lasse es zu einem Unfall kommen und reagiere dann erst.

??? Das ist doch der Zweck von Exceptions?
Zeos erkennt ja dass die lib da ist - also muss es ja auch eine Möglichkeit geben dass selbst festzustellen - oder ?

Rufe dlopen() aus unit dl auf und schaue ob NIL geliefert wird.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von wp_xyz »

Wenn in der Funktion FileExists eine relativer Pfad steht, wird die Datei relativ zum aktuellen Arbeitsverzeichnis gesucht. Ich vermute, dass Zeos aber den Systempfad durchsucht. Dazu hat FPC die Funktion SearchFileInPath. Wenn du noch mit GetEnvironmentVariable den Pfad ausliest, müsste es eigentlich klappen - zumindest funktioniert das folgende bei mir unter Windows:

Code: Alles auswählen

uses
  FileUtil;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  path: String;
  fn: String;
begin
  path := GetEnvironmentVariable('path');
  fn := SearchFileInPath('sqlite3.dll', '', path, ';', []);
  ShowMessage(fn);
end;   
Zuletzt geändert von wp_xyz am Do 21. Dez 2017, 14:31, insgesamt 1-mal geändert.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von DL3AD »

Hallo mse,

wie würde man denn die von Zeos geworfene exception behandeln damit z.B. eine Message ausgegeben wird dass die lib nicht gefunden wurde ?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von mse »

Code: Alles auswählen

 
procedure TForm1.DBOn;
begin
[...]
    ZConDB.Connected      := false;
    ZConDB.Database       := Config.ReadString('Setup','Database','');
    ZConDB.LibraryLocation:= 'libsqlite3.so.0';//Ohne die obige Prüfung kann er auf die lib hier zugreifen.
    try
     ZConDB.Connected      := true;
     QueryLog.Active       := true;
    except
     application.handleexception();
    //weitere aktionen im fehlerfall
    end;
 

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von Mathias »

Code: Alles auswählen

 if FileExists('libsqlite3.so.0') then//Hier bei der Prüfung wird die lib nicht gefunden
  else
  begin
    ShowMessage('libsqlite3 not found !');
    Halt;
  end;

Befindest du dich auch in dem Ordner, wo sich die Datei "libsqlite3.so.0" befindet ?
Ansonsten findet FileExits die Datei nicht.

Aber der Liberty-Manager kann sie trotzdem finden und einbinden.

ZB. bei der OpenGL Lib 'libGL.so.1' ist dies auch der Fall.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von DL3AD »

Hallo mse,

bei

Code: Alles auswählen

application.handleexception();

gibt es eine Fehlermeldung wegen fehlendem Parameter :shock:

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von Mathias »

gibt es eine Fehlermeldung wegen fehlendem Parameter

Versuche es mal so:

Code: Alles auswählen

Application.HandleException(Self);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitrag von mse »

DL3AD hat geschrieben:Hallo mse,

bei

Code: Alles auswählen

application.handleexception();

gibt es eine Fehlermeldung wegen fehlendem Parameter :shock:

Sorry, das war aus dem Kopf, bei MSEgui gibt es einen default-Parameter:

Code: Alles auswählen

 
 tcustomapplication = class(tmsecomponent)
[...]
   procedure handleexception(sender: tobject = nil;
                                       const leadingtext: msestring = '');
 

Antworten