# LibNoDave mit Lazarus unter Mac OS X?



## marcengbarth (1 Mai 2009)

Hallo,

ich habe mir eben mal zum Testen Lazarus auf meinem Mac installiert. Funktioniert ja wunderbar. 
Nur leider bekomme ich LibNoDave nicht eingebunden. Hat das schon mal jemand versucht?

Gruß
  Marc


----------



## pvbrowser (4 Mai 2009)

Bei Mac OS-X handelt es sich um ein Unix System.
Du kannst also die für Linux gedachte Variante von libnodave verwenden.

In unserem http://pvbrowser.org haben wir das auch gemacht.
Wenn Du das runter lädst kannst Du das in pvb/rllib/lib (Verzeichnis) sehen.

Bei unseren Projekten wird dann noch die
/usr/lib/libpthread.dylib
eingebunden. Was aber für die reie socket Kommunikation von libnodave keine Rolle spielt. Um die Socket Funktionen unter Mac zur Verfügung zu haben, musst Du glaube ich keine weitern Libs angeben (Ich weiss das jetzt nicht so genau, weil unsere Makefile mit qmake   http://doc.trolltech.com/4.5/qmake-manual.html erzeugt werden).


----------



## marcengbarth (4 Mai 2009)

Danke, werde ich mir mal anschauen.


----------



## Ralle (5 Mai 2009)

Wenn du fertig bist, würde mich mal ein kleiner Bericht hier sehr interessieren!


----------



## pvbrowser (5 Mai 2009)

Damit libnodave übersetzt werden kann,
sind in unserem qmake pro file (pvs/rlllib/lib/lib.pro)
noch 2 defines hinzugefügt worden.

# LITTLEENDIAN and LINUX is only for libnodave to work
DEFINES           += LITTLEENDIAN
unixEFINES      += LINUX

Wegen LITTLEENDIAN bedeutet das, dass es nur mit intel Mac's funktioniert.


----------



## Zottel (5 Mai 2009)

pvbrowser schrieb:


> # LITTLEENDIAN and LINUX is only for libnodave to work
> DEFINES           += LITTLEENDIAN
> unixEFINES      += LINUX
> 
> Wegen LITTLEENDIAN bedeutet das, dass es nur mit intel Mac's funktioniert.


DAVE_LITTLE_ENDIAN aktiviert einige Programmzeilen zum Umordnen der Bytes in Mehrbyte-Variablen.

LINUX aktiviert Programmzeilen, die das Vorhandensein der Funktion select() vorraussetzen und daß Filedeskriptoren für sockets, files und serielle Schnittstellen vom selben Typ sind.

BCCWIN aktiviert Programmzeilen, die stattdessen Windows-spezifische Methoden nutzen, um sockets und serielle Schnittstellen anzusprechen.

Läßt man beides (LINUX und BCCWIN) weg, so gibt es keine Art, um sockets und serielle Schnittstellen anzusprechen und der Compiler sollte meckern. Wer will, kann sich für sein OS eigene Funktionen definieren.

Für ein UNIX-artiges Betriebssystem auf einer big-endian-Maschine  (Power MAC) müßte man also mit
#define LINUX
und OHNE 
DAVE_LITTLE_ENDIAN
übersetzen.

Da das lange niemand mehr probiert hat, mag es sein, daß irgendwas nicht (mehr) funktioniert. In diesem Fall bitte ich um Rückmeldung.


----------



## marcengbarth (5 Mai 2009)

Mein MAC ist intelbasiert, daher gibts kein big-endian-Problem.

Wenn ich was erreiche, dann poste ich hier mal meine Fortschritte.


----------



## chrise92 (16 Mai 2013)

Ich Versuche gerade LibNoDave mit Xcode zu verwenden, leider klappt die einbindung von LibNoDave nicht, kann mir hier jemand weiterhelfen?
Vielen Dank


----------



## Zottel (16 Mai 2013)

Was ist xcode?
Was willst du wie einbinden?
Was klappt nicht?


----------



## chrise92 (16 Mai 2013)

Hallo,
Xcode ist eine Programmierumgebung für Mac.
Ich möchte mithilfe von LibNoDave auf DB´s in meiner SPS zugreifen.


----------



## Jochen Kühner (16 Mai 2013)

chrise92 schrieb:


> Ich Versuche gerade LibNoDave mit Xcode zu verwenden, leider klappt die einbindung von LibNoDave nicht, kann mir hier jemand weiterhelfen?
> Vielen Dank



Für was willst du den compilieren? Iphone und Ipad? Das sollte auf jeden Fall funktionieren, Ich hab die dafür schon compiliert!


----------



## chrise92 (16 Mai 2013)

Vorerst wollte ich es auf dem Mac nutzen, später dann auch Iphone, könntest du mir erklären wie du das gemacht hast
Vielen Dank


----------



## Zottel (16 Mai 2013)

chrise92 schrieb:


> Hallo,
> Xcode ist eine Programmierumgebung für Mac.
> Ich möchte mithilfe von LibNoDave auf DB´s in meiner SPS zugreifen.



Der Apostroph in DB's macht mir Augenkrätze!

Keine Ahnung ob MAC OS X shared libraries für Linux nutzen kann. Wenn nicht, mußt du zunächst Libnodave kompilieren. Das sollte kein Problem sein. Wenn doch, solltest du README.compiling lesen und verstehen. Weitere Nachfragen sollten davon zeugen, daß du das getan hast.


----------



## Jochen Kühner (16 Mai 2013)

chrise92 schrieb:


> Vorerst wollte ich es auf dem Mac nutzen, später dann auch Iphone, könntest du mir erklären wie du das gemacht hast
> Vielen Dank



Also auf dem Mac im IPhone Simulator läufts auf jeden Fall nicht mehr (auch wenn man als x86 compiliert!), aber auf dem IPhone gehts bei mir. Für normale Mac Anwendungen sollts aber auch funktionieren! Falls du eine IPhone App entwicklen willst, musst du berücksichtigen, das du nur statisch linken kannst, dynamisch läßt Apple nicht zu!

Mit dem Compilieren für eine Mac Anwendung hab Ich mich noch nicht beschäftigt, aber denke das geht ähnlich wie fürs IPhone. Fürs IPhone musst du einfach wie für Linux compilieren, hab mein MakeFile im Moment leider dazu nicht zur Hand


----------



## chrise92 (16 Mai 2013)

Hallo, vielen Dank wäre nett wenn du mir den MakeFile mal senden könntest wenn du ihn mal wieder zur Hand hast
Danke


----------



## Dragonfire (1 Juni 2013)

Hallo chrise92,

habe auch interesse daran. Wie weit bist du gekommen?


----------



## PeterHollanda (1 Juni 2013)

Vielleicht makefile ansehen             http://www.sps-forum.de/hochsprachen-opc/56582-libnodave-kompilieren-auf-raspberry-pi.html

Meine raspberry pi ist noch immer nicht fertig, uiviele andere arbeit

Meine erste schritte mit Linux  und Gambas2


----------



## pvbrowser (1 Juni 2013)

PeterHollanda schrieb:


> Vielleicht makefile ansehen             http://www.sps-forum.de/hochsprachen-opc/56582-libnodave-kompilieren-auf-raspberry-pi.html



Der Raspberry ist doch ein ganz normales Linux (Ich habe da Debian drauf).
Makefiles schreibe ich nicht zu Fuss sondern generiere die mit qmake (Tool von Qt).
Dazu habe ich das Qt Entwicklungspaket auf dem Pi installiert.

Wenn Du das auf einem normalen Linux hinkriegst,
dann sollte der Pi kein Problem sein.

In den PRO files für qmake habe ich für libnodave ein paar definitionen machen müssen.
# LITTLEENDIAN and LINUX is only for libnodave to work
DEFINES           += LITTLEENDIAN
unixEFINES      += LINUX
unix:QMAKE_LFLAGS += -pthread -lpthread

Wie das mit "LITTLEENDIAN" auf dem Pi aussieht, weiss ich nicht so genau.


----------



## chrise92 (29 August 2013)

hallo,
leider klappt das mit dem kompilieren noch immer nicht.

Beim kompilieren bekomme ich immer folgende Fehlermeldungen
undefined symbols for architecture i386:
  "_daveConnectPLC", referenced from:
      -[ViewController viewDidLoad] in ViewController.o
  "_daveNewConnection", referenced from:
      -[ViewController viewDidLoad] in ViewController.o
  "_daveNewInterface", referenced from:
      -[ViewController viewDidLoad] in ViewController.o
  "_daveSetTimeout", referenced from:
      -[ViewController viewDidLoad] in ViewController.o
  "_openSocket", referenced from:
      -[ViewController viewDidLoad] in ViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)


ld: symbol(s) not found for architecture i386




Ich hoffe ihr könnt mir helfen


----------



## chrise92 (8 September 2013)

Hallo,
habe das problem mittlerweile gelöst, leider klappt die Verbindung selbst noch nicht ich poste einfach mal den Log


openSocket: enter OpenSocketopenSocket: OpenSocket: socket is 6
openSocket: Connected to host: 10.0.8.1 
openSocket: Set mode to O_NONBLOCK Undefined error: 0 0
daveNewInterface(fd.rfd:6 fd.wfd:6 name:IF1 local MPI:0 protocol:122 PB speed:2)
daveSetTimeOut(di:0x10050d900, time:500000)
send packet: : 
0:0x03,0x00,0x00,0x16,0x11,0xE0,0x00,0x00,0x00,0x01,0x00,0xC1,0x02,0x01,0x00,0xC2,
10:0x02,0x01,0x02,0xC0,0x01,0x09,
readISOpacket: 22 bytes read, 22 needed
readISOpacket: packet: 
0:0x03,0x00,0x00,0x16,0x11,0xD0,0x00,0x01,0x44,0x31,0x00,0xC0,0x01,0x09,0xC1,0x02,
10:0x01,0x00,0xC2,0x02,0x01,0x02,
IF1 daveConnectPLC() step 1. got packet: : 
0:0x03,0x00,0x00,0x16,0x11,0xD0,0x00,0x01,0x44,0x31,0x00,0xC0,0x01,0x09,0xC1,0x02,
10:0x01,0x00,0xC2,0x02,0x01,0x02,
PDU header: 
0:0x32,0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
plen: 8 dlen: 0
Parameter: 
0:0xF0,0x00,0x00,0x01,0x00,0x01,0x03,0xC0,
_daveExchange PDU number: 65535
IF1 enter _daveExchangeTCP
send packet: : 
0:0x03,0x00,0x00,0x19,0x02,0xF0,0x80,0x32,0x01,0x00,0x00,0xFF,0xFF,0x08,0x00,0x00,
10:0x00,0xF0,0x00,0x00,0x01,0x00,0x01,0x03,0xC0,
res -1 readISOpacket: short packet: 
IF1 _daveExchangeTCP res from read 0
result of exchange: -1025
IF1 error in daveConnectPLC() step 1. retrying...
PDU header: 
0:0x32,0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
plen: 8 dlen: 0
Parameter: 
0:0xF0,0x00,0x00,0x01,0x00,0x01,0x03,0xC0,
_daveExchange PDU number: 65536
IF1 enter _daveExchangeTCP
send packet: : 
0:0x03,0x00,0x00,0x19,0x02,0xF0,0x80,0x32,0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
10:0x00,0xF0,0x00,0x00,0x01,0x00,0x01,0x03,0xC0,


Beim ausführen des Codes bleibt er an folgendem Thread hängen:


libsystem_kernel.dylib`write:
0x7fff857c04a0:  movl   $33554436, %eax
0x7fff857c04a5:  movq   %rcx, %r10
0x7fff857c04a8:  syscall
0x7fff857c04aa:  jae    0x7fff857c04b1            ; write + 17
0x7fff857c04ac:  jmpq   0x7fff857c04c8            ; cerror
0x7fff857c04b1:  ret    
0x7fff857c04b2:  nop    
0x7fff857c04b3:  nop    

Ich hoffe ihr könnt mir helfen

Vielen dank


----------

