Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Für Fragen von Einsteigern und Programmieranfängern...

Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Beitragvon DL3AD » 21. Dez 2017, 12:36 Unter LINUX Datei ist vorhanden wird aber nicht gefunden

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
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon kralle » 21. Dez 2017, 12:43 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Moin,

es gibt für FileExist auch eine UTF-Version
Code: Alles auswählen
FileExistsUTF8
vielleicht hilft Dir das Weiter.

Gruß Heiko
Linux Mint 19 und Lazarus 1.8.4 (FPC-Version: 3.0.4)
Windows 8.1 Pro Lazarus 1.8.2 + Delphi XE7SP1
kralle
 
Beiträge: 515
Registriert: 17. Mär 2010, 14:50
Wohnort: Bremerhaven
OS, Lazarus, FPC: Linux Mint 18.3 - Lazarus 1.9 - FPC 3.0.4 -Win8.1 & XE7Pro | 
CPU-Target: 64Bit
Nach oben

Beitragvon DL3AD » 21. Dez 2017, 12:53 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

...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:
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon kralle » 21. Dez 2017, 13:13 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Linux Mint 19 und Lazarus 1.8.4 (FPC-Version: 3.0.4)
Windows 8.1 Pro Lazarus 1.8.2 + Delphi XE7SP1
kralle
 
Beiträge: 515
Registriert: 17. Mär 2010, 14:50
Wohnort: Bremerhaven
OS, Lazarus, FPC: Linux Mint 18.3 - Lazarus 1.9 - FPC 3.0.4 -Win8.1 & XE7Pro | 
CPU-Target: 64Bit
Nach oben

Beitragvon Epcop » 21. Dez 2017, 13:17 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Zuerst das Arbeitsverzeichnis auf den aktuellen Ordner bzw. dort wo die Datei liegt setzen?
Epcop
 
Beiträge: 78
Registriert: 29. Mai 2012, 08:36

Beitragvon mse » 21. Dez 2017, 13:23 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

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?
mse
 
Beiträge: 1930
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon DL3AD » 21. Dez 2017, 13:30 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

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 ?
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon mse » 21. Dez 2017, 13:52 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

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.
mse
 
Beiträge: 1930
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon wp_xyz » 21. Dez 2017, 14:01 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

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 21. Dez 2017, 14:31, insgesamt 1-mal geändert.
wp_xyz
 
Beiträge: 2530
Registriert: 8. Apr 2011, 08:01

Beitragvon DL3AD » 21. Dez 2017, 14:12 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

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 ?
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon mse » 21. Dez 2017, 14:27 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

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;
 
mse
 
Beiträge: 1930
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Mathias » 21. Dez 2017, 18:09 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3978
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon DL3AD » 21. Dez 2017, 19:23 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

Hallo mse,

bei
Code: Alles auswählen
application.handleexception();

gibt es eine Fehlermeldung wegen fehlendem Parameter :shock:
DL3AD
 
Beiträge: 368
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon Mathias » 21. Dez 2017, 19:51 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

gibt es eine Fehlermeldung wegen fehlendem Parameter

Versuche es mal so:
Code: Alles auswählen
Application.HandleException(Self);
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3978
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 22. Dez 2017, 08:03 Re: Unter LINUX Datei ist vorhanden wird aber nicht gefunden

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 = '');
 
mse
 
Beiträge: 1930
Registriert: 16. Okt 2008, 09: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
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried