1

私は worklight、wikitude と呼ばれる拡張現実プラグイン、および sqlcipher と呼ばれるフレームワークを使用しています。デバイスまたはアーカイブ用にビルドするときは iOS で正常に動作しますが、シミュレーター用にビルドしようとすると、見たことのない警告が表示され、その後に多数の重複シンボル エラーが続きます。

ld: warning: tentative definition of '_OPENSSL_ia32cap_P' with size 8 from '/Users/mine/apps/wl/iphone/native/Frameworks/sqlcipher.framework/sqlcipher(cryptlib.o)'
is being replaced by real definition of smaller size 4 from '/Users/mine/apps/wl/iphone/native/libWikitudeSDK.a(cryptlib.o)'

次に、このエラー(切り捨て):

duplicate symbol _CRYPTO_THREADID_cmp in:
/Users/mine/apps/wl/iphone/native/Frameworks/sqlcipher.framework/sqlcipher(cryptlib.o)
/Users/mine/apps/wl/iphone/native/libWikitudeSDK.a(cryptlib.o)
.
.
.
duplicate symbol _OpenSSLDie in:
/Users/mine/apps/wl/iphone/native/Frameworks/sqlcipher.framework/sqlcipher(cryptlib.o)
/Users/mine/apps/wl/iphone/native/libWikitudeSDK.a(cryptlib.o)
ld: 33 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Wikitude は libWikitudeSDK.a を介してプロジェクトに含まれており、ライブラリ ビルド フェーズとのリンクにあります。sqlcipher は同じ場所に追加された .framework です。-all_load を使用したときに、wikitudeSDK と worklightSDK の間で上記と同じ重複シンボルの問題が発生したため、他のリンカー フラグは -ObjC に設定されています。

重複エラーを回避する方法については、このブログの指示に従いましたが、cryptlib.o に関する 1 つの問題は修正されますが、何百もの新しい重複シンボル エラーが発生するだけです。新しいライブラリを構築するときに lipo -arch_blank i386 も試しましたが、アーキテクチャ i386 エラーの未定義シンボルのみが発生します。

明確にするために、シミュレーター内で拡張現実コンポーネントを実行しようとしているわけではありません。シミュレーターを使用して、ウィキチュードに依存しないアプリケーションの他の側面を開発したいだけです。

プロジェクトからウィキチュードを一時的に削除することはオプションですが、プロジェクトのバージョン管理は関係者全員にとってこれを頭痛の種にし、余分な不要な複雑さをもたらします。

洞察をお寄せいただきありがとうございます。

4

1 に答える 1

2

ご使用の Worklight のバージョンはわかりませんが、6.2 より前のバージョンだと思います。Worklight 6.2 では、-all_load フラグが、特定のライブラリー用の一連の -force_load フラグに置き換えられました。

-all_load の代わりに、特定のライブラリに対して -force_load を使用してみてください。これを行う方法を説明する Worklight 6.1 の Technote があります: Xcode linker options requirements to use FIPS 140-2 with IBM Worklight。FIPS 140-2 オプション機能を使用していないため、libfipshttp.a に -force_load を追加しません。libCordova.a と libWorklightStaticLibProject.a の両方に -force_load を追加し、説明に従って -all_load を削除します。リンク時に未定義のシンボルが発生した場合は、使用している他のライブラリに -force_load を追加する必要がある場合があることに注意してください。

参考までに、ここに Worklight 6.2 での変更点を説明しているセクションios: Changes in Xcode linker options のリンクを示します。

于 2014-07-11T17:47:06.697 に答える