2016-06-07 7 views
1

Sharpie가이 SDK에 대해 컴파일 가능한 코드를 생성 할 수 없어서 P/Invoke를 사용하여 iOS SDK에 바인딩하는 래퍼를 작성했습니다.xamarin ios 바인딩의 네이티브 연결 오류

나는 그런이 한 많은 연결 문제를 데 참조 래퍼 프로젝트와 iOS 앱을 컴파일 :

엠 터치 : 오류 MT5210 : 기본 연결 실패, 정의되지 않은 심볼 : 표준 : : 로케일 :: 고전(). 모든 필요한 프레임 워크가 참조되었으며 기본 라이브러리가 제대로 링크되어 있는지 확인하십시오. MTOUCH : 오류 MT5210 : 기본 연결에 실패했습니다. 정의되지 않은 기호 : std :: __ throw_bad_cast(). 모든 필요한 프레임 워크가 참조되었고 네이티브 라이브러리가 올바르게 링크되어 있는지 확인하십시오. MTOUCH : 오류 MT5210 : 기본 연결이 실패했습니다. 정의되지 않은 기호 : std :: invalid_argument :: invalid_argument (std :: string const &). . 필요한 모든 프레임 워크가 참조 된 네이티브 라이브러리가 제대로 연결되어 있는지 확인하십시오. (이 complete log file에 전체 로그를 찾아주세요)

아이폰 OS 프로젝트에서 전달 된 여분의 모노 터치 인수는 아래에 설명되어 있습니다 :

-cxx -v -gcc_flags "-L $ {PROJECTDIR} -lstdC++ -lresolv -liconv -lxml2 -lz -ObjC -force_load $ {PROJECTDIR} /Libs/libcrypto.a"-cxx -v -gcc_flags "-L $ {ProjectDir} -lstdC++ -lresolv -liconv -lxml2 -lz -ObjC -force_load $ {ProjectDir} /Libs/libssl.a"-cxx -v -gcc_flags "-lstdC++ -lresolv -liconv -lxml2 -lz- ObjC -L $ {ProjectDir} -framework 보안 -fr amework CoreVideo -framework CoreMedia -framework AVFoundation -framework CFNetwork에서 -framework 가속화 -framework AudioToolbox -framework의 CoreAudio -framework 재단 -framework에있는 CoreGraphics -framework UIKit -force_load $ {PROJECTDIR} /Libs/libsipwrapper.a -dead_strip -all_load "

SDK는 libcrypto.a, libssl.a 및 libsipwrapper.a의 세 라이브러리로 구성됩니다.

인터넷상의 많은 기사/게시물에 이어 -lstdC++, lz 및 ObjC와 같은 표준 라이브러리를 추가하는 것이 좋습니다. 그러나 이것은 제 경우에는 효과가없는 것 같습니다.

내가 또한 세 개의 라이브러리와 래퍼 코드를 포함하는 바인딩 프로젝트를 만들려고 한 내용이 linkwith 파일에 추가는 것 같아 :

[조립 : LinkWith ("libsipwrapper.a" , LinkTarget.ArmV7 | LinkTarget.ArmV7s | LinkTarget.Arm64, Frameworks = "CoreVideo CoreMedia AVFoundation CFNetwork AudioToolbox CoreAudio Foundation CoreGraphics UIKit 가속화", ForceLoad = false, SmartLink = true, IsCxx = true, LinkerFlags = "-lstdC++ -lresolv -liconv - lxml2-lz-ObjC ")]

문제가 해결되지 않았습니다. ved 및 설명 된 연결 오류가 계속됩니다.)

일을 당신의 운영자와 파일이 정말 터미널 사용에 대한 불평이 기호가있는 경우는 확인이 -> grep 명령, 모든 아키텍처 당신이를 :

프로젝트의 자세한 내용을 모른 채

답변

1

낭비되는 시간이 2 일 남았는데 마침내 나도 알아 냈습니다. 만져서 전달할 매개 변수를 추측하고, 계층에서 자체적으로 만든 라이브러리를 올바르게 연결하는 것은 분명하지 않습니다. 작업을 단순화하기 위해 SDK 공급자가 제공하는 데모 응용 프로그램을 컴파일하고 Xcode를 사용하여 데모를 컴파일 한 다음 Xcode에서 clang ++로 보낸 매개 변수를 가져옵니다. 이 monotouch을 보낼 수있는 매개 변수를 알아 내기 위해 나를 도와 :

--compiler : 그 소리 ++ -cxx -v -gcc_flags "-stdlib = 된 libstdC++ -L $ {PROJECTDIR} -force_load $ {PROJECTDIR}/libs와/libcrypto.a "-cxx -v -gcc_flags"-stdlib = libstdC++ -L $ {ProjectDir} -force_load $ {ProjectDir} /Libs/libssl.a "-cxx -v -gcc_flags"-dead_strip -lresolv -liconv -stdlib = libstdC++ -fobjc-arc -fobjc-link-runtime -framework CoreMedia -framework CoreVideo -framework AVFoundation -framework CFNetwork -framework AudioToolbox -framework CoreAudio -lz -lxml2 -framework CoreGraphics -framework UIKit -framework Foundation -L $ {ProjectDir} -force_load $ {ProjectDir} /Libs/libsipwrapper.a "

다른 사람들에게 도움이되기를 바랍니다.

나는 것, 당신을 위해 감사는 운영자와 파일이 다른에 대한 기호 아키텍처를 지원하는 것이있는 경우 1. 아직 확인되지 않음 대답, 처음에는

1

, 당신이 선택해야 support : armv7/armv7s/arm64

2) C# 코드에서 자신의 라이브러리 이름 대신 [DllImport ("__Internal")]을 사용 했습니까?

+0

(아래도 매우 중요하다 @NyxSway에 의해 기술 된 두 점을 확인) 지금 확인하고 피드백을 보내십시오. 2. 예 [DllImport ("libsipwrapper")] 대신 [DllImport ("__ Internal")]을 사용하고 있습니다. –