2017-01-04 2 views
0

Ich versuche, eine gemeinsam genutzte Bibliothek auf einem Raspberry Pi (Modell 3B) mit Lazarus zu verwenden. Nach einigen verwirrenden Sachen fand ich heraus, dass meine ursprüngliche Bibliothek nicht richtig funktionierte, also wechselte ich zu einer sehr einfachen Bibliothek, die this Beispiel verwendete.Erstellen Sie eine gemeinsame Bibliothek auf einem Raspberry mit Lazarus

Aber auch diese einfache Bibliothek kann nicht richtig kompiliert werden. Wenn ich versuche, die Bibliothek in einem anderen lazarus Projekt zu öffnen, es gibt mir den Fehler:

<libName>: cannot open shared object file: No such file or directory 

Nach einigen Recherchen habe ich folgende Diagnose fand ich laufen konnte. Die Datei und LDD-Befehl in der Kompilierung Bibliothek:

$ file ./libname.so gibt:

./libname.so: ELF 32-bit LSB shared object, ARM, EABI5 verion 1 (SYSV), dynamically linked, not stripped 

$ ldd ./libname.so

not a dynamic executable 

ich für ähnlich gelagerte Fälle gesucht und festgestellt, dass andere dieses Problem hatten, wenn sie versuchten, Bibliotheken für eine andere Plattform/Architektur zu kompilieren. Ich habe das Projekt> Projektoptionen> Compileroptionen> Zielplattform bereits auf OS: = Linux und Target CPU family: arm gesetzt.

Das System verwende ich ($ uname -a verwenden):

Linux raspberrypi 4.4.13-V7+ #894 SMP Mon Jun 13 13:13:27 BST 2016 armv7l GNU/Linux 

mit Distro: Raspbian GNU/Linux 8.0 (jessie)

Lazarus Version: 1.2.4 + dfsg2-1 FPC-Version: 2.6.4 arm-linux-gtk2

An diesem Punkt bin ich nicht sicher, was falsch ist und warum diese Bibliothek nicht funktioniert. Ich kann sehr wenig Informationen zu diesem Problem finden (auf der Aspberry-Plattform und Lazarus verwenden) Irgendwelche Vorschläge, was ich versuchen könnte, damit es funktioniert, kompilieren Sie es anders oder machen Sie mehr Diagnosen?

+0

Und wenn Sie LD_LIBRARY_PATH =. Tun, was passiert dann? Oder versuchen Sie, die Einheit "initc" in Ihre Bibliothek zu importieren. –

+0

Versuchte beide, tatsächlich löste die initc es, aber resultierte in einem anderen Problem. Habe jedoch eine Lösung gefunden, die ich posten werde. Danke trotzdem! – Steven

Antwort

2

Die Lösung gefunden. Wie oben von Marco vorgeschlagen: Fügen Sie dem uses-Teil initc hinzu. Wenn Sie versuchen, eine Bibliothek zu erstellen, müssen Sie initcs, cmem oder LCL in den Abschnitt uses aufnehmen, da die Bibliothek eine Speicherverwaltung ausführen muss, für die sie eine dieser Einheiten benötigt.

Allerdings führte dies zu einem anderen Fehler, wenn die Bibliothek zu laden versuchen:

"Undefined symbol: TC_SYSTEM_ISLIBRARY" 

Dies scheint ein Himbeer-spezifisches Problem zu sein, Compiler auf anderen Systemen diesem Fehler nicht geben. Weitere Informationen finden Sie unter HERE.

Schließlich löste dies durch installieren fpc 3.0.0 Compiler auf dem Raspberry Pi, kompilierte es und die Bibliothek kann ordnungsgemäß geladen werden (aber immer noch eine der oben genannten Einheiten).

+1

FPC 2.6.4 für Arm ist nur für Softfloat-Ziele. Die hardwarebeschleunigten Raspbi sind 3rd Party Backports. Sie waren nicht schlecht, aber die Migration auf 3.0.0 (oder 3.0.2rc1 und bald 3.0.2 hoffe ich) ist zu empfehlen –

Verwandte Themen