Entwickler-Ecke

Entwicklung für mobile Endgeräte - libnodave für Android


canoniac - Mi 20.08.14 08:56
Titel: libnodave für Android
Hallo zusammen,

ich versuche für eine Projektarbeit von einem Android-Tablet / Smartphone auf eine S7 SPS zuzugreifen. Dazu habe ich die Bibliothek libnodave gefunden und mir stellen sich einige Fragen.

- Hat das schon jemand versucht?

- Kann ich die bereitgestellten Komponenten einfach so in einer mobilenFireMonkey Anwendung verwenden?

Vielen Dank schonmal im Voraus!

Jannik


canoniac - Mi 20.08.14 13:54


Delphi-Quelltext
1:
2:
uses
  SysUtils, Classes, NoDave, SyncObjs, FMX.Controls, {$IFDEF FPC} LCLIntf, LResources {$ELSE} WINDOWS {$ENDIF};


Ich kann das Projekt unter WIN32 compilieren, allerdings tritt beim transferieren auf Android tritt ein Fehler auf.
uses WINDOWS
funktioniert unter Android nicht.

Hat jemand eine Idee wie das zu lösen ist?


Horst_H - Mi 20.08.14 14:15

Hallo,

nimm doch USES windows raus und klapper dann die Compilermeldungen ab, um die Abhängigkeiten von der unit windows zu finden und passend zu ersetzen.

Gruß Horst


canoniac - Do 21.08.14 15:06

Erstmal danke für die Antwort. Ich dachte ich hätte das Problem umgangen indem ich einfach die NoDaveComponent.pas nicht mehr verwende und stattdessen nur NoDave.pas und libnodave.dll. Das funktioniert auch als WIN32 ganz wunderbar, nur beim compilieren unter Android bekomme ich diesen Fehler:

[DCC Fehler] E2597 C:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\android-ndk-r10\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-ld.exe: error: cannot find -lnodave

C:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\android-ndk-r10\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-ld.exe: C:\Users\Jannik\Documents\Embarcadero\Studio\Projekte\Verbindung\Android\Debug\nodave.o: in function Nodave::openSocket(int, char16_t*):nodave(.text._ZN6Nodave10openSocketEiPDs+0x4): error: undefined reference to 'openSocket'

selbige Meldung gibt es für jede andere Funktion der libnodave.

Was genau verursacht diesen Fehler und wie löse ich ihn?

Vielen Dank
Jannik


Sinspin - Sa 23.08.14 00:06

Alles was eine Dll, also eine Windows spezifische Library, verwendet kann natürlich unter anderen Betriebssystemen nicht verwendet werden. Bzw. Aufrufe, wie der der da angemeckert wird, müssen ersetzt werden durch entsprechende für das Zielsystem gültige.


jaenicke - Sa 23.08.14 06:29

Es existiert dort ein IFDEF LINUX. Mit etwas Glück kannst du einfach LINUX als Direktive in den Projektoptionen anlegen um es zum Laufen zu bringen. Denn prinzipiell funktioniert die Bibliothek ja unter Android, es fehlt nur der Pascal Wrapper speziell für Android.


canoniac - Mo 25.08.14 12:27

Es scheint ja ein Linkerfehler zu sein mit dem Zusatz cannot find -lnodave.

Wo müsste die libnodave.so denn hineinkopiert werden?


Chemiker - Mi 03.09.14 20:14

Hallo,

vielleicht die Frage im SPS-Forum mal stellen früher war der Entwickler von libnodave dort unterwegs, vielleicht kann er Dir weiterhelfen. http://www.sps-forum.de/search.php?searchid=3615354

Bis bald Chemiker