私の Visual Studio Xamarin Forms iOS プロジェクトでは、Visual Studio Cross C++ Platform を使用してビルドおよびデプロイしたネイティブ (c++) ライブラリにリンクしています。(Mac サーバーを介して) 実際のデバイスにリンクして実行することはできますが、シミュレーターを介して動作させることはできません。同じリンク設定でビルドすると、ビルドが失敗し、エントリポイントが見つかりません。リンクしないことを選択した場合、ビルドは成功しますが、ネイティブ コードを呼び出そうとした時点で実行すると、am Entrypointnotfoundexception が発生します。
1 に答える
ここで彼のサンプルコードを使用して、あなたのコメントの例を調べました。正しく実行するには、いくつかのことを行う必要がありました。私の問題は Xamarin.iOS にありましたが、プラットフォーム固有の統合が既に機能していると仮定すると、同じ手順を Xamarin.Forms に適用できます。
コードは物理デバイス上で動作しているNative Static Reference
ため、.a
ライブラリには既に . ただし、iOS シミュレーターはx86_64
アーキテクチャ (iOS 11 以降は をサポートしていませんi386
) で実行されますが、デバイスは のいくつかのバージョン/バリアントで実行される可能性がありますARM
。ライブラリは、デバイスのアーキテクチャのみをサポートするように構築されているようです。lipo
これは、Mac から実行して確認できます。
% lipo -info /usr/lib/libCLib.iOS.a
シムのアーキテクチャもサポートするには (この記事を参照)、サポートする必要があるアーキテクチャに合わせて C++ プロジェクトをビルドし、次のように組み合わせます。
lipo -create -output libCLib.iOS.a libCLib.iOS-x8664.a libCLib.iOS-arm64.a
その出力ファイルをVisual Studio で.a
新しいファイルとして使用します。プロジェクト設定を にNative Static Reference
変更します。これですべてです。これが誰かに役立つことを願っています。Supported Architectures
x86_64