gSOAP
gSOAP, Xcode und Linker Probleme die zweite
21/Apr/2008 18:14
Ich habe noch mal ein wenig mit den verschiedenen
Optionen von gSOAP herumgespielt und dabei folgendes
festgestellt: die Probleme die ich beim Linken des
Projektes hatte haben scheinbar nichts mit gSOAP zu
tun!
Interessanterweise tritt das Problem immer dann auf, wenn man dem Projekt zuerst die von gSOAP erzeugten Dateien, und dann die gsoap Library hinzufügt!
Macht man es umgekehrt, also erst die Libarary hinzufügen und dann die Stub Files, dann compiliert und linkt das Projekt ohne Probleme.
Eine Erklärung konnte ich für dieses Verhalten bislang nicht finden.
Interessanterweise tritt das Problem immer dann auf, wenn man dem Projekt zuerst die von gSOAP erzeugten Dateien, und dann die gsoap Library hinzufügt!
Macht man es umgekehrt, also erst die Libarary hinzufügen und dann die Stub Files, dann compiliert und linkt das Projekt ohne Probleme.
Eine Erklärung konnte ich für dieses Verhalten bislang nicht finden.
|
gSoap, XCode und Cocoa
19/Apr/2008 11:19
Da meine Versuche, funktionierende Stubs mit
WSMakeStubs zu erzeugen, fehlgeschlagen sind, habe
ich mich entschlossen es mit gSOAP zu versuchen.
Also hab ich gSOAP heruntergeladen, mit ./configure -prefix=/installdir - make - make install gSOAP compiliert und installiert.
Mit "wsdl2h -o NameDerHeaderDatei.h http://url_zur_wesdldatei.wsdl" und "soapcpp2 NameDerHeaderDatei.h" hab ich die Stub Files erzeugt und anschließend die erzeugten Dateien + stdsoap2.h und stdsoap2.cpp zu meinem Xcode Projekt hinzugefügt.
Leider hat direkt der erste Versuch das Projekt zum compilieren und zu linken fehlgeschlagen.
Der Linker hat die Meldung
"_namespaces", referenced from:
_namespaces$non_lazy_ptr in stdsoap2.o
symbol(s) not found"
ausgeworfen. Intensive Recherchen bei Google haben mich leider nicht weitergebracht.
Was letztendlich geholfen hat, war gSOAP erneut, mit dem Flag "--disable-namespaces" zu compilieren:
/configure --prefix=/installdir --disable-namespaces
make
make install
Die anschließend neu erzeugten Stub Files hab ich erneut in mein Projekt importiert, dann noch die Library libsoap++.a eingebunden (einfach mit der Maus vom Finder in die Dateiliste im XCode ziehen).
Leider gab es immer noch Probleme beim Linken des Projektes. Die Ursache war diesmal jedoch, dass die importierten Quellcodes nicht alle compiliert wurden. Ich hab sie dann von Hand zum Target hinzugefügt (wieder per Drag&Drop in den Abschnitt "Compile Sources"):
Jetzt endlich kann das Projekt erfolgreich compiliert und gelinkt werden. Auch die Verwendung der erzeugten Klassen aus den Stub Files funktioniert ohne Probleme.
Also hab ich gSOAP heruntergeladen, mit ./configure -prefix=/installdir - make - make install gSOAP compiliert und installiert.
Mit "wsdl2h -o NameDerHeaderDatei.h http://url_zur_wesdldatei.wsdl" und "soapcpp2 NameDerHeaderDatei.h" hab ich die Stub Files erzeugt und anschließend die erzeugten Dateien + stdsoap2.h und stdsoap2.cpp zu meinem Xcode Projekt hinzugefügt.
Leider hat direkt der erste Versuch das Projekt zum compilieren und zu linken fehlgeschlagen.
Der Linker hat die Meldung
"_namespaces", referenced from:
_namespaces$non_lazy_ptr in stdsoap2.o
symbol(s) not found"
ausgeworfen. Intensive Recherchen bei Google haben mich leider nicht weitergebracht.
Was letztendlich geholfen hat, war gSOAP erneut, mit dem Flag "--disable-namespaces" zu compilieren:
/configure --prefix=/installdir --disable-namespaces
make
make install
Die anschließend neu erzeugten Stub Files hab ich erneut in mein Projekt importiert, dann noch die Library libsoap++.a eingebunden (einfach mit der Maus vom Finder in die Dateiliste im XCode ziehen).
Leider gab es immer noch Probleme beim Linken des Projektes. Die Ursache war diesmal jedoch, dass die importierten Quellcodes nicht alle compiliert wurden. Ich hab sie dann von Hand zum Target hinzugefügt (wieder per Drag&Drop in den Abschnitt "Compile Sources"):
Jetzt endlich kann das Projekt erfolgreich compiliert und gelinkt werden. Auch die Verwendung der erzeugten Klassen aus den Stub Files funktioniert ohne Probleme.
Objective-C und C++ Code mischen
16/Apr/2008 21:38
Ich
bin immer noch dabei eine Möglichkeit zu finden,
erfolgreich einen Aufruf des Webservices auszuführen.
Da meine Versuche mit den von WSMakeStubs erzeugten
Stubs keinen Erfolg gebracht haben, habe ich mir nun
vorgenommen mit Hilfe von gSOAP C++
Stubs zu erzeugen die ich dann in meiner Cocoa
Anwendung verwende.
Dazu habe ich heute erst mal geprüft inwiefern sich Objective-C und C++ - Code miteinander kombinieren lässt. Das erste Ergebnis ist erfreulich positiv!
Die C++ Klasse konnte ich direkt im Projekt anlegen. Um diese aus meiner Objective-C Klasse aus instanzieren zu können, hat es ausgereicht die Objective-C Datei mit der Endung ".mm" statt ".m" zu versehen.
In diesem Fall wird der Objective-C++ Compiler verwendet, der eine gemeinsame Verwendung von Objective-C und C++ zulässt.
In den Projekteinstellungen lässt sich bei den Build Einstellungen allerdings auch generell die verwendete Sprache einstellen:
Ich finde die Standardeinstellungen "According to File Type" für meinen Fall passend.
Der gemischte Code kann dann z.B. so aussehen:
CPPTestClass *cpctc = new CPPTestClass(); // Instanz von C++ Klasse erzeugen
[textfield setIntValue: cpctc->getValue()]; // Objective-C Nachricht mit Ergebnis von C++-Methodenaufruf als Parameter
delete cpctc; // C++ Objekt löschen
Mein nächster Schritt wird jetzt sein die von gSOAP erstellten Klassen in mein Projekt zu importieren und den Webservice Aufruf darüber auszuführen.
Dazu habe ich heute erst mal geprüft inwiefern sich Objective-C und C++ - Code miteinander kombinieren lässt. Das erste Ergebnis ist erfreulich positiv!
Die C++ Klasse konnte ich direkt im Projekt anlegen. Um diese aus meiner Objective-C Klasse aus instanzieren zu können, hat es ausgereicht die Objective-C Datei mit der Endung ".mm" statt ".m" zu versehen.
In diesem Fall wird der Objective-C++ Compiler verwendet, der eine gemeinsame Verwendung von Objective-C und C++ zulässt.
In den Projekteinstellungen lässt sich bei den Build Einstellungen allerdings auch generell die verwendete Sprache einstellen:
Ich finde die Standardeinstellungen "According to File Type" für meinen Fall passend.
Der gemischte Code kann dann z.B. so aussehen:
CPPTestClass *cpctc = new CPPTestClass(); // Instanz von C++ Klasse erzeugen
[textfield setIntValue: cpctc->getValue()]; // Objective-C Nachricht mit Ergebnis von C++-Methodenaufruf als Parameter
delete cpctc; // C++ Objekt löschen
Mein nächster Schritt wird jetzt sein die von gSOAP erstellten Klassen in mein Projekt zu importieren und den Webservice Aufruf darüber auszuführen.