エラーは次のとおりです。
Undefined symbols for architecture armv7:
"___udivmodsi4", referenced from:
_sqlite3BitvecSet in libmergDropboxSync.a(sqlite3.o)
_sqlite3BitvecClear in libmergDropboxSync.a(sqlite3.o)
_sqlite3BitvecTest in libmergDropboxSync.a(sqlite3.o)
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
lipo: can't open input file: /var/folders/np/1scdfrdd7kx64bbykn22wj200000gn/T//ccvBM79H.out (No such file or directory)
error: linking step of external dylib build failed, probably due to missing framework or library references - check the contents of the mergDropboxSync.ios file
Command /bin/sh emitted errors but did not return a nonzero exit code to indicate failure
シミュレーター用にビルドすると、正常にビルドされます。私のライブラリは正常にコンパイルされています。問題があるのは、デバイス ビルドの依存関係チェックのみの場合と同様に、lclink.sh に記載されている dylib のリンク段階のみです。
# Build the 'dylib' form of the external - this is used by simulator builds, and as
# a dependency check for device builds.
"$PLATFORM_DEVELOPER_BIN_DIR/g++" -dynamiclib $ARCHS -isysroot "$SDKROOT" -o "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.dylib" "$BUILT_PRODUCTS_DIR/$EXECUTABLE_NAME" $SYMBOL_ARGS $SYMBOLS $DEPS
if [ $? != 0 ]; then
echo "error: linking step of external dylib build failed, probably due to missing framework or library references - check the contents of the $PRODUCT_NAME.ios file"
exit $?
fi
次を使用して、この手順をスキップしようとしました。
if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then
# Build the 'dylib' form of the external - this is used by simulator builds, and as
# a dependency check for device builds.
"$PLATFORM_DEVELOPER_BIN_DIR/g++" -dynamiclib $ARCHS -isysroot "$SDKROOT" -o "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.dylib" "$BUILT_PRODUCTS_DIR/$EXECUTABLE_NAME" $SYMBOL_ARGS $SYMBOLS $DEPS
if [ $? != 0 ]; then
echo "error: linking step of external dylib build failed, probably due to missing framework or library references - check the contents of the $PRODUCT_NAME.ios file"
exit $?
fi
fi
これにより、スクリプトが続行し、デバイス ビルドで静的リンク用のオブジェクト ファイルをビルドできるようになりました。それらは正常にビルドされましたが、スタンドアロンをビルドしようとすると、依存関係チェックによってブロックされました。誰でも推奨できる回避策はありますか?
わずかに変更された lclink.sh を使用していることに注意してください。これは、ビルド対象の SDK に応じて、弱いリンクのサポートとオプションのフレームワークの組み込みを追加します。それが役立つ場合は、ここで見つけることができます 。
編集
エラーが明らかにarmv7に関連していたことを考えると、armv7sに対してビルドを試みたところ、正常にビルドされました。新しいドロップボックス同期 SDK には armv7s のみのコードが含まれている可能性があるという結論に達しています。エラーに基づいて、sqliteに関連しているようです。この段階で他に何を試すべきかわからない...
編集
これは、Dropbox 同期 API が Apple LLVM および LiveCode 外部でコンパイルされ、デバイス ビルドが Apple GCC でコンパイルされているために発生するツールチェーンの問題であると思われます。