LibNoDave mit Lazarus unter Mac OS X?

marcengbarth

Level-1
Beiträge
226
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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).
 
Wenn du fertig bist, würde mich mal ein kleiner Bericht hier sehr interessieren!
 
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
unix:DEFINES += LINUX

Wegen LITTLEENDIAN bedeutet das, dass es nur mit intel Mac's funktioniert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
# LITTLEENDIAN and LINUX is only for libnodave to work
DEFINES += LITTLEENDIAN
unix:DEFINES += 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.
 
Mein MAC ist intelbasiert, daher gibts kein big-endian-Problem.

Wenn ich was erreiche, dann poste ich hier mal meine Fortschritte.
 
Ich Versuche gerade LibNoDave mit Xcode zu verwenden, leider klappt die einbindung von LibNoDave nicht, kann mir hier jemand weiterhelfen?
Vielen Dank
 
Hallo,
Xcode ist eine Programmierumgebung für Mac.
Ich möchte mithilfe von LibNoDave auf DB´s in meiner SPS zugreifen.
 
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.
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren

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
unix:DEFINES += LINUX
unix:QMAKE_LFLAGS += -pthread -lpthread

Wie das mit "LITTLEENDIAN" auf dem Pi aussieht, weiss ich nicht so genau.
 
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
 
Zuletzt bearbeitet:
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
 
Zurück
Oben