2012-04-12 9 views
0

本当にこの問題に悩まされています。私はあなたが私を助けてくれることを願っています。gSOAPを使用したApple Mach-O Linker(Id)エラー

私はセキュリティ保護されたSOAP Webサービスを使用する必要がある企業向けのiPadアプリを開発しています...完璧な組み合わせではありません!私は知っていることは、googleの周りを見て、私は "最高の"ことは、gSOAPを使用してWSクライアントを作っていたことがわかったと私は何をした!今私はそれらのWSのC + +のクライアントを持っています。

私は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アーキテクチャ 打ち鳴らす見つかりません記号(S)リンカコマンドは注意が問題を伝えること

終了コード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)の "Compile Sources"にいくつかのcppファイルがないことに気付いたことです... gSOAPによって生成されたファイルがこのライブラリに含まれていると言います.h、.cpp、および.xml)。今問題は、私は新しいエラーがあることです:今度は:ld: duplicate symbol soap_instantiate_std__string ...これは複製されています...しかし、gSOAPによって構築! :(( – VaroX

0

OK!私はあなたが静的を作るしようとしている場合、それは(ないインポート)ヘッダと - 私はWSを消費しようとしている.mmファイル内のgSOAPによって生成nsMapに...

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

を含む解決しましたライブラリサービスの "Build Phases"に本当に注意してください... ヘッダーコンパイルソースを慎重に追加してください!その後

...輸入あなたのiOSへヘッダ XMLS同じフォルダの下で "lib.a" をのproyect!そして、このような何かやっ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それについて多くの情報を見つけるために!

:)

関連する問題