2012-04-12 71 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找到关于它的很多信息!

:)