2012-04-12 72 views
0

我真的陷入了這個問題......我希望你能幫助我。Apple Mach-O Linker(Id)使用gSOAP的錯誤

我正在爲一家公司開發一款iPad應用程序,這需要使用安全的SOAP Web服務......而不是完美的組合!我知道,事情是,看看周圍的谷歌,我發現「最好」的事情是做一個WS客戶端使用gSOAP,這就是我做的!現在我有一個用C++編寫的WS客戶端。

當我嘗試調用的WS的方法之一,並構建應用程序......這是發生了什麼:

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, 

文件歸檔建這是不被連接的架構(I386 )

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 

注:缺少虛函數表通常意味着第一非內嵌虛擬成員函數沒有定義。 LD:符號(S)沒有找到i386硬件架構 鐺:錯誤:連接命令,退出代碼爲1(使用-v看看調用)

的說明可以告訴這個問題失敗...但我don'不知道如何解決它...任何想法?

謝謝!

回答

0

這個問題可能是你爲iPAd(ARM體系結構)建立了一個庫,並嘗試構建到模擬器(i386體系結構)。嘗試建立到實際的設備。

對我的提示是:

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

+0

首先,感謝您的快速回答!我一直致力於在主項目的相同體系結構中構建libdataSOAPlibDev.a庫,但問題並沒有消失!好處是我意識到我在靜態庫的目標(libdataSOAPlibDev.a)的「編譯源文件」中丟失了一些cpp文件...我不得不說,這個庫包含由gSOAP生成的文件( .h,.cpp和.xml)。現在的問題是,我有一個新的錯誤:這次是:ld: duplicate symbol soap_instantiate_std__string ...這是重複的...但由gSOAP建成! :(( – VaroX 2012-04-12 13:31:26

0

OK!我解決它包括(進口)的頭部,並在.mm文件,其中我正嘗試消耗WS由gSOAP的產生nsmap ...

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

如果你打算做一個靜態庫中的gSOAP創建的WS客戶端,請仔細閱讀庫項目的「Build Phases」...請仔細添加標頭編譯源

之後...導入到您的iOS proyect的「lib.a」個XML同一文件夾下!並調用WS做這樣的事情:

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"); 
} 

我希望這可以幫助任何人......因爲我有這樣一個很難搞清楚了這一點......和didn't找到關於它的很多信息!

:)