1

Sharpie はこの SDK のコンパイル可能なコードを生成できなかったため、P/Invoke を使用して iOS SDK にバインドするラッパーを作成しています。

ラッパー プロジェクトを参照して iOS アプリをコンパイルすると、次のような多くのリンクの問題が発生します。

MTOUCH: エラー MT5210: ネイティブ リンクに失敗しました。未定義のシンボル: std::locale::classic()。必要なすべてのフレームワークが参照され、ネイティブ ライブラリが適切にリンクされていることを確認してください。 MTOUCH: エラー MT5210: ネイティブ リンクに失敗しました。未定義のシンボル: std::__throw_bad_cast()。必要なすべてのフレームワークが参照され、ネイティブ ライブラリが適切にリンクされていることを確認してください。必要なすべてのフレームワークが参照され、ネイティブ ライブラリが適切にリンクされていることを確認してください (この完全なログ ファイルで完全なログを見つけてください)。

iOS プロジェクトから渡される追加の mono touch 引数を以下に示します。

-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 Security -framework CoreVideo -framework CoreMedia -framework AVFoundation -framework CFNetwork -framework Accelerate -framework AudioToolbox -framework CoreAudio -framework Foundation -framework CoreGraphics -framework UIKit -force_load ${ProjectDir}/Libs/libsipwrapper.a -dead_strip -all_load "

SDK は、libcrypto.a、libssl.a、libsipwrapper.a の 3 つのライブラリで構成されています。

インターネット上の多くの記事/投稿に従って、-lstdc++、lz、および ObjC などの標準ライブラリを追加することをお勧めしますが、これは私の場合は機能しないようです。

また、3 つのライブラリとラッパー コードを含むバインド プロジェクトを作成しようとしましたが、linkwith ファイルに追加されたコンテンツは次のようになります。

[アセンブリ: LinkWith ("libsipwrapper.a", LinkTarget.ArmV7 | LinkTarget.ArmV7s | LinkTarget.Arm64, フレームワーク = "CoreVideo CoreMedia AVFoundation CFNetwork Accelerate AudioToolbox CoreAudio Foundation CoreGraphics UIKit", ForceLoad = false, SmartLink = true, IsCxx = true, LinkerFlags = "-lstdc++ -lresolv -liconv -lxml2 -lz -ObjC")]

問題は解決されず、記載されているリンク エラーが引き続き発生します。

4

2 に答える 2

2

2 日間無駄な時間を過ごした後、私はついにそれを手に入れました。明確にするために、タッチに渡すパラメーターを推測することは明らかではありません。層によって構築されたライブラリを自分だけで正しくリンクすることです。タスクを簡素化するために、SDK プロバイダーが提供するデモ アプリをコンパイルし、Xcode を使用してデモをコンパイルし、Xcode から clang++ に送信されたパラメーターを取得します。これは、モノタッチに送信するパラメーターを理解するのに役立ちました。

--compiler:clang++ -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"

これが他の人に役立つことを願っています。

(以下の @NyxSway によって説明されている 2 つのポイントも非常に重要であることを確認してください)

于 2016-06-08T16:18:51.647 に答える