2012-04-12 6 views
0

Ich bin wirklich mit diesem Problem fest ... und ich hoffe, Sie können mir hier helfen.Apple Mach-O Linker (Id) Fehler mit GSOAP

Ich entwickle eine iPad-App für ein Unternehmen, das die Verwendung gesicherter SOAP-Webdienste erfordert ... nicht die perfekte Kombination! Ich weiß, die Sache ist, dass man sich bei Google umschaut, ich fand, dass das "beste" was ich machen sollte, war, einen WS-Client mit gSOAP zu erstellen und das habe ich gemacht! Jetzt habe ich den Client für einen dieser WS in C++.

Wenn ich versuche, eine der Methoden des WS zu nennen, und die App bauen ... das ist, was passiert:

Ld /Users/me/Library/Developer/Xcode/DerivedData/App-akcairabnqiunvddtmwphaispprl/Build/Products/Debug-iphonesimulator/App.app/App normal i386 
cd /Users/me/iOS/App 

setenv MACOSX_DEPLOYMENT_TARGET 10.6 

setenv PATH '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin' 

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch i386 -isysroot 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk 
-L/Users/me/Library/Developer/Xcode/DerivedData/App-akcairabnqiunvddtmwphaispprl/Build/Products/Debug-iphonesimulator 
-L/Users/me/iOS/App -F/Users/me/Library/Developer/Xcode/DerivedData/App-akcairabnqiunvddtmwphaispprl/Build/Products/Debug-iphonesimulator 
-F/Applications/Xcode.app/Contents/Developer/Library/Frameworks 
-filelist /Users/me/Library/Developer/Xcode/DerivedData/App-akcairabnqiunvddtmwphaispprl/Build/Intermediates/App.build/Debug-iphonesimulator/App.build/Objects-normal/i386/App.LinkFileList 
-mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED=50100 
-framework SenTestingKit -framework Foundation -framework UIKit -framework QuartzCore -framework CoreGraphics -ldataSOAPlibDev 
-o /Users/me/Library/Developer/Xcode/DerivedData/App-akcairabnqiunvddtmwphaispprl/Build/Products/Debug-iphonesimulator/App.app/App 

ld: warning: ignoring file /Users/me/iOS/App/libdataSOAPlibDev.a, 

Datei für Archiv gebaut wurde, welche verknüpft (i386 nicht die Architektur wird

)
Undefined symbols for architecture i386: 

    'soap::soap()', referenced from: 
    -[ViewContratosController viewDidLoad] in ViewContratosController.o 
    '_soap_init_LIBRARY_VERSION_REQUIRED_20808', referenced from: 
    -[ViewContratosController viewDidLoad] in ViewContratosController.o 
'soap_call_ns1__obtenerPais(soap*, char const*, char const*, ns2__paisFile*,  
    ns1__obtenerPaisResponse&)', referenced from: 
    -[ViewContratosController viewDidLoad] in ViewContratosController.o 
'soap::~soap()', referenced from: 
    -[ViewContratosController viewDidLoad] in ViewContratosController.o 
'ns2__paisFile::soap_default(soap*)', referenced from: 
    ns2__paisFile::ns2__paisFile() in ViewContratosController.o 
'vtable for ns2__paisFile', referenced from: 
    ns2__paisFile::ns2__paisFile() in ViewContratosController.o 

HINWEIS: eine fehlende vtable in der Regel bedeutet, dass die erste nicht-Inline virtuelle Member-Funktion hat keine Definition. ld: Symbol (e) nicht für Architektur i386 Klirren gefunden: Fehler: Linker Befehl fehlgeschlagen mit Exit-Code 1 (Verwendung -v Aufruf sehen)

Der Hinweis, dem Problem sagen kann ... aber ich don' t wissen, wie man es löst ... irgendwelche Ideen?

Danke!

Antwort

0

Das Problem ist wahrscheinlich, dass Sie eine Bibliothek für iPAd (ARM-Architektur) genommen und versucht haben, zum Simulator (i386-Architektur) zu bauen. Versuchen Sie stattdessen, das tatsächliche Gerät zu erstellen.

Der Hinweis war für mich:

ld: warning: ignoring file /Users/me/iOS/App/libdataSOAPlibDev.a, file was built for archive which is not the architecture being linked (i386)

+0

Zunächst einmal, vielen Dank für die schnelle Antwort! Ich habe an der Erstellung der Bibliothek libdataSOAPlibDev.a in der gleichen Architektur des Hauptprojekts gearbeitet, aber das Problem ist nicht verschwunden! Die gute Sache ist, dass ich erkannte, dass ich einige CPP-Dateien in den "Compile Sources" für das Ziel der statischen Bibliothek (libdataSOAPlibDev.a) fehlte ... ich muss sagen, dass diese Bibliothek die von gSOAP erzeugten Dateien enthält (.h, .cpp und .xml).Jetzt ist das Problem, dass ich einen neuen Fehler habe: diese Zeit ist: ld: duplicate symbol soap_instantiate_std__string ... das ist dupliziert ... aber gebaut von gSOAP! : (( – VaroX

0

OK! Ich löste es (nicht Import) die Header und die nsmap erzeugt durch gSOAP in der .mm Datei auch dann, wenn die WS ich bin zu verbrauchen versuchen ...

#include "soapH.h" 
#include "soapStub.h" 
#include "soapdataServiceSoapBindingProxy.h" 
#include "dataServiceSoapBinding.nsmap" 

Wenn Sie eine statische machen werden Bibliothek aus einem WS-Client erstellt von gSOAP, seien Sie wirklich vorsichtig mit der "Build-Phasen" der Bibliothek Projekt ... fügen Sie sorgfältig die Header und die kompilieren Quellen!

Danach ... Import iOS Proyect die "lib.a" mit den Header und die XMLs unter dem gleichen Ordner! und rufen Sie die WS so etwas wie dies zu tun:

dataServiceSoapBinding service; 
ns2__countryFile country; 
struct ns1__getCountryResponse response; 

country.idCountry = 11; 

if(service.ns1__getCountry(&country, response) == SOAP_OK) { 
    NSLog(@"ok"); 
} else { 
    NSLog(@"ERROR"); 
} 

Ich hoffe, das jemand helfen kann ..., weil ich so eine harte Zeit gehabt, dies herauszufinden ... und Artikel nicht viele Informationen über sie finden!

:)