0

我真的被这个问题困住了......我希望你能在这里帮助我。

我正在为一家公司开发 iPad 应用程序,该应用程序需要使用安全的 SOAP Web 服务……这不是完美的组合!我知道,事情是环顾谷歌,我发现“最好”的事情是使用 gSOAP 制作一个 WS 客户端,这就是我所做的!现在我有了 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

注意:缺少 vtable 通常意味着第一个非内联虚拟成员函数没有定义。 ld:未找到体系结构 i386 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

注意可能会说明问题......但我不知道如何解决它......有什么想法吗?

谢谢!

4

2 回答 2

0

问题可能是您为 iPAd(ARM 架构)使用了一个库,并尝试构建到模拟器(i386 架构)。尝试构建到实际设备。

对我的提示是:

ld:警告:忽略文件/Users/me/iOS/App/libdataSOAPlibDev.a,文件是为存档而构建的,它不是被链接的架构(i386)

于 2012-04-12T07:37:12.227 回答
0

好的!我解决了它,包括(导入)标题和由gSOAP在我试图使用WS的.mm文件中生成的nsmap......

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

如果您要使用由 gSOAP 创建的 WS 客户端制作静态库,请务必小心库项目的“构建阶段”...仔细添加标头编译源

之后...将带有标题XML的“lib.a”导入到您的iOS项目中!并调用 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");
}

我希望这可以帮助任何人......因为我很难弄清楚这一点......并且没有找到太多关于它的信息!

:)

于 2012-04-13T11:45:30.740 回答