1

エラーは次のとおりです。

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 でコンパイルされているために発生するツールチェーンの問題であると思われます。

4

1 に答える 1

0

これは役に立ちますか?私はやや似たような問題を抱えていたときにこれを書きました。

dylib ライブラリへのリンクに関する runrev レッスン

于 2013-03-21T17:32:07.760 に答える