Lazarus Embedded SQLite Datenbank als Obj Datei

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Acia6850
Beiträge: 37
Registriert: Mo 9. Okt 2023, 18:45
OS, Lazarus, FPC: Windows + WSL / Linux Debian Rasbian OS (L 3.0.0 FPC 3.3.2)
CPU-Target: 64Bit
Wohnort: LK Ludwigsburg

Lazarus Embedded SQLite Datenbank als Obj Datei

Beitrag von Acia6850 »

Hallo,

c Cpmpiler = gcc

ich habe die neuste SQLit3.c source datei zu einer Obj Datei kompiliert.
Anschliessend die Obj Datei mit einem Lazarus Wrapper in eine Lazarus Konsolen Applikation eingebunden.

Dies funktioniert mit Windows 10 64 Bit wunderbar.
Die Applikation läuft mit der Embedded SQLite Datenbank.

Nun wollte ich das selbe unter Linux machen.

SQLit3.c unter Linux mit gcc zu sqlite.o kompiliert und eingebunden wie bei Windows.
Lazarus ist als Cross Compiler für Linux x86_64 und aarch64 installiert und eingerichtet.

Dabei kommt folgende Fehlermeldung :


Debug: C:\LazarusCross_300\cross\bin\aarch64-linux\aarch64-linux-gnu-ld.exe: C:\DevelopeHomeMaster\Apps\RpiHomeMasterCli\Pas\..\Lib\aarch64-linux\sqlite3.o:(.data.rel+0xb0): undefined reference to `fcntl64'

Code: Alles auswählen

{$PACKRECORDS C} (* C/C++-compatible record packing *)

{$IFDEF WIN64}
  {$link ..\Lib\x86_64-win64\sqlite3.o}       // link SQlite3 database engine
//  {$Link ..\lib\x86_64-win64\cosvermain64.o}
  {$Linklib ..\Lib\x86_64-win64\libmsvcrt.a}
  {$Linklib ..\lib\x86_64-win64\kernel32.a}
  {$Linklib ..\lib\x86_64-win64\libgcc.a}

{$ELSE}
  {$IFDEF CPUAARCH64}
    {$link ../Lib/aarch64-linux/sqlite3.o}       // link SQlite3 database engine
    {$Linklib ../Lib/aarch64-linux/libgcc.a}

  {$ENDIF}

  {$IFDEF CPUx86_64}
    {$link ../Lib/x86_64-linux/sqlite3.o}       // link SQlite3 database engine
    {$Linklib ../Lib/x86_64-linux/libgcc.a}

  {$ENDIF}
{$ENDIF} 
                
Manche libs gibt es in Linux nicht ?

Ist es möglich SQLite3 DB auch in Linux als Embedded DB einzubinden oder nur über eine Shared library ?


Wer weiss wie man den Fehler besitigen kann.


Grüße Acia6850

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6845
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Lazarus Embedded SQLite Datenbank als Obj Datei

Beitrag von af0815 »

Ich habe es aufgrund der anderen Struktur von Linux immer nur als shared Lib eingebunden. Bei Linux kann ich ja ohne Probleme das sqllite-dev Paket als Voraussetzung extra installieren lassen.

Damit bin ich nicht in das Problem gekommen, das die Sqlite.o vielleicht noch andere Abhängigkeiten hat, die man dann zur Linkzeit irgendwie mühsam erfüllen muß.

Unter Windows habe ich mit dem Installationspaket die notwendige DLL installiert, damit ging es auch als DLL.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Soner
Beiträge: 734
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Lazarus Embedded SQLite Datenbank als Obj Datei

Beitrag von Soner »

Direkt mit dein Problem kann ich dir nicht helfen, aber Mormot hatte Objektdateien für Sqlite. Ich habe damals seine Objektdateien verwendet für Embedded Sqlite unter Windows, Mormot selbst nicht, vielleicht hat er das immer noch. Ich denke, er stellte auch für Linux Objektdateien.

Acia6850
Beiträge: 37
Registriert: Mo 9. Okt 2023, 18:45
OS, Lazarus, FPC: Windows + WSL / Linux Debian Rasbian OS (L 3.0.0 FPC 3.3.2)
CPU-Target: 64Bit
Wohnort: LK Ludwigsburg

Re: Lazarus Embedded SQLite Datenbank als Obj Datei

Beitrag von Acia6850 »

Vielen Dank

für die schnellen Informationen.

Ich werde mir das Packet Mormot mal ansehen,
wie dort die Einbindung von SQLite3 in Lazarus Linux gemacht wird.

Am einfachsten ist wahrscheinlich den Lazarus SQLite-Wrapper auf die Anbindung mit der shared Librarry unter Linux zu erweitern.

Somit habe ich zwei gute Ansätze für die Lösung.


Grüße

Acia6850

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6845
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Lazarus Embedded SQLite Datenbank als Obj Datei

Beitrag von af0815 »

Acia6850 hat geschrieben: Di 3. Jun 2025, 11:55 Am einfachsten ist wahrscheinlich den Lazarus SQLite-Wrapper auf die Anbindung mit der shared Librarry unter Linux zu erweitern
Das verstehe ich jetzt nicht, das Sqlite3 Paket von Lazarus stellt ja alles für das dynamische Laden = shared library zur Verfügung. Und stellt alles nötige zur Verfügung.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Acia6850
Beiträge: 37
Registriert: Mo 9. Okt 2023, 18:45
OS, Lazarus, FPC: Windows + WSL / Linux Debian Rasbian OS (L 3.0.0 FPC 3.3.2)
CPU-Target: 64Bit
Wohnort: LK Ludwigsburg

Re: Lazarus Embedded SQLite Datenbank als Obj Datei

Beitrag von Acia6850 »

Hallo,

danke für den Tip.

Ich habe die Lösung für die statische embedded SQLite3.o in Lazarus für Linux aarch64 gefunden.

Die neuste Lazarus Version auf dem Raspberry PI und Debian 12 "Bookworm war ein Erfolg.

Beim CrossCompiler sind die cLibs zu alt er benötigt ein Update.

Grüße
Acia6850

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6845
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Lazarus Embedded SQLite Datenbank als Obj Datei

Beitrag von af0815 »

Acia6850 hat geschrieben: Di 10. Jun 2025, 19:50 Beim CrossCompiler sind die cLibs zu alt er benötigt ein Update.
Nein, so etwas ist meistens volle Absicht, dazu muss man das C-Librarysystem verstehen.

Es wir normalerweise eine möglichst alte C-Lib genommen, die die benötigten Funktionen hat, weil neuere C-Libs immer die alten Funktionen ungeändert bereitstellen. Nimmst du jetzt eine brandneue C-Lib, so kann der damit gelinkte Code oft auf älteren Systemen nicht mehr gestartet werden, weil halt die neueste C-Lib verlangt wird. Daher sind dann Systeme wie Debian plötzlich ausgeschlossen, weil die sehr konservativ die C-Lib upgraden. Und eine neue C-Lib, so einfach installieren geht nicht, das heisst, wenn es möglich wäre, ein komplettupdate vom System.

Die Probleme hat man mit einer 'alten' C-Lib nicht. Neuere C-Libs implementieren immer die alten Interfaces, damit kann das System neu sein (oder alt) wie es will, es funktioniert einfach.

Das ist erst vor kurzen wiedermal aufgetreten, nachdem eine Distribution eine neue C-Lib eingeführt hat. Diejenigen, die dort ihre Software erstellt haben, sind damit konfrontiert worden, das die Software inkompatibel mit anderen System ist. Hat auch so seine Zeit gedaurt bis wirklich klar war, was los ist. Vor allen FPC/Lazarus brauchen nur ganz wenige Funktionen aus der C-Lib und die gibt es seit laaaanger Zeit in der C-Lib. Deswegen spielt es keine Rolle. Vor allen wird, wo es geht, dynamisches laden verwendet.

Bei dir, kann es sein, das deine Objektdatei gegen eine neuere C-Lib erstellt wurde, daher kommen die Probleme. Dein Programm wird daher nicht unbedingt auf einem System mit einer älteren C-Lib laufen. Wenn du die Software für dich kompilierst ist das kein Problem, wenn du aber die Software für andere Computer kompilierst kann es sein, das du dann die Rückmeldung bekommst - läuft bei mir nicht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten