20

数日前、私は .NETで問題なく動作する静的ライブラリ (ユニバーサル)を作成しましXcode5.0 SDK7た。更新後、シミュレーターを選択するXcode5.1と機能しません。次に、ベロー設定の変更でライブラリを更新します。SDK7.1iPhone Retina(4-inch 64-bit)

ここに画像の説明を入力

3 つのターゲットに対して同じことを行います:-

ここに画像の説明を入力

スポーツシミュレーターとデバイスの場合、ユニバーサルライブラリを配置し、これにスクリプトを実行します:- ここに画像の説明を入力

この後、私は再びlibをビルドし、以前に行ったようにプロジェクトに使用しました。しかし、まだ同じ問題が発生していますiPhone Retina(4-inch 64-bit) Undefined symbols for architecture x86_64:


の lib を更新するために必要な追加の変更があるか、または上記の手順で間違いを犯したかということです。私が間違っている場合は、現在私を教えてください。

サポートのために静的ライブラリを更新するために必要な変更64Bit architecture

ノート:

自分で作成したライブラリの更新を求めています。私はサードパーティのライブラリを使用していません。 アップデート

このlipo -info testingLibImport/libLibNSlog.aコマンドをターミナルで使用すると、出力は次のようになります。

Architectures in the fat file: testingLibImport/libLibNSlog.a are: armv7 armv7s i386 arm64 
4

4 に答える 4

14

XCode 6.4 で見つけた別の解決策は、ONLY_ACTIVE_ARCH=NOを追加し、アーキテクチャを指定しないことです。そう

xcodebuild -target TargetName ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

ライブラリに i386 および x86_64 アーキテクチャを構築します。


これは、すべてのアーキテクチャを構築するための完全なユニバーサル lib 実行スクリプトです。

# define output folder environment variable
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

# Step 1. Build Device and Simulator versions
xcodebuild -target TargetName ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
xcodebuild -target TargetName ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

# make sure the output directory exists
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

# Step 2. Create universal binary file using lipo
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a"                "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"

# Last touch. copy the header files. Just for convenience
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"
于 2015-07-02T09:50:24.170 に答える
10

私も昨日同じ問題に遭遇し、多くのグーグルとさまざまな解決策を試した後、あきらめて自分で試しました。提供されたさまざまなソリューションから理解できたのは、「lipo -info library.a」を実行すると、x86_64 アーキテクチャ用にビルドされていないということだけでした。そこで、集約アプローチをあきらめ、単純な試みを行うことにしました。

  1. この投稿でアドバイスされているように、armv7、armv7s、および arm64 をアーキテクチャに追加しました。
  2. iphone シミュレーター (32 ビット) で静的ライブラリ プロジェクトをビルドします。
  3. iPhone シミュレーター (64 ビット) を使用して静的ライブラリ プロジェクトをビルドします。
  4. iOS デバイスでスタティック ライブラリ プロジェクトをビルドする
  5. ビルド パスに移動します (派生データの下)
  6. シミュレーターとデバイスの両方の出力を共通フォルダーにコピーしました
  7. ターミナル ウィンドウで lipo コマンドを使用して、ユニバーサル ライブラリを作成しました。

lipo コマンド: lipo -create -output newlibraryname.a simulatorlibraryname.a devicelibraryname.a

新しく作成されたユニバーサル静的ライブラリを統合し、機能しました!!!

于 2014-10-15T12:20:53.263 に答える
4

別のソリューションを投稿して申し訳ありません。ユニバーサルライブラリを構築する必要があるたびにlipoコマンドを使用してユニバーサルライブラリを作成する手作業から私を救う解決策を見つけようとしていたとき、私はずっと前にこの解決策を見つけました。

したがって、ここに別のアプローチがあります。集約アプローチを使用してユニバーサルライブラリを構築する人向けです

シミュレーターの集約スクリプトで、以下に示すように、ユニバーサルライブラリを構築するための小さな変更を1つ加えるだけです-

xcodebuild -target ProductName -configuration ${CONFIGURATION} -sdk iphonesimulator ARCHS="i386 x86_64" BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" SYMROOT="${SYMROOT}"

単一のアーキテクチャ アプローチを使用する代わりに、複数のアーキテクチャを含めることに注意してください -

xcodebuild -target ProductName -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" SYMROOT="${SYMROOT}"

ARCHS ="i386 x86_64"だけで魔法がかかります。

これは、次の lipo コマンドlipo -info newLibraryName.aを使用して確認できます 。

これが私のような他の多くの人にとって時間を節約できることを願っています!!!

于 2014-12-14T15:02:14.737 に答える