8

zbar-sdk (バーコード スキャン ライブラリ) を使用するプロジェクトがあります。

マシンを xcode 4.5 および ios6sdk に更新した後、いくつかの問題が発生しています。

プロジェクトについて何も触れずに、シミュレーターをビルドすることができました。これは、最新の zbar 1.2 ライブラリを使用しています。

次に、テストのために ios6 デバイスにビルドしたかったのですが、そのときにエラーが発生しました。

zbar 開発者フォーラムでグーグルで調べたところ、zbar 開発者はまだこれを行っていないため、zbar ソースを取得して armv7 および armv7s 用の libzbar.a をビルドする必要があることがわかりました。

参照 - http://sourceforge.net/projects/zbar/forums/forum/1072195/topic/5728912

だから私はこれを行い、更新された libzbar.a を私のプロジェクトに再インポートしました。次に、自分のデバイス用にビルドしましたが、うまくいきました! アプリをテスト デバイスに入れることができ、zbar バーコード ライブラリは正常に機能しました。

これで終わりだと思っていましたが、残念ながらそうではありませんでした。

次に、シミュレーター (ios6) に再度ビルドしようとしましたが、失敗しました。

このプロジェクトをデバイスとシミュレーターの両方に対して同時に同じ設定でビルドすることはできません:(

独自の libzbar.a ファイルをビルドするときの libzbar.a プロジェクト設定:

アーキテクチャ: 標準 (armv7、armv7s) $(ARCHS_STANDARD_32_BIT)

アクティブなアーキテクチャのみをビルド: いいえ

有効なアーキテクチャ: armv7 armv7s

そして、私のプロジェクト設定(myapp用)は次のとおりです。

アーキテクチャ: 標準 (armv7、armv7s) $(ARCHS_STANDARD_32_BIT)

アクティブなアーキテクチャのみをビルド: いいえ

有効なアーキテクチャ: armv7 armv7s

ベース SDK: iOS6

iOS 展開ターゲット: iOS 5.0

そして、シミュレーターにビルドしようとしたときのエラー:

ld: warning: ignoring file /Users/blah/iOS App/myapp/ZBarSDK/libzbar.a, missing required architecture i386 in file /Users/blah/iOS App/myapp/ZBarSDK/libzbar.a (2 slices)
Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_ZBarReaderViewController", referenced from:
      objc-class-ref in mycontroller.o
  "_ZBarReaderControllerResults", referenced from:
      -[mycontroller imagePickerController:didFinishPickingMediaWithInfo:] in mycontroller.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

libzbar.a プロジェクト設定を微調整しようとしましたが (たとえば、ビルド アクティブ アーキテクチャを「YES」に設定)、シミュレーターもデバイスも動作しません。

デバイスでは機能するがシミュレーターでは機能しないという事実は、これを引き起こす奇妙なアーキテクチャ/プロジェクト設定があることを私に感じさせます。

どんな助けでも大歓迎です!

4

2 に答える 2

2

これが正しい答えだとは思えませんが、私にとってはうまくいきました。アーキテクチャを使用して新しい libzber.a をコンパイルしました: i386 armv6 armv7 armv7s この順序で、有効なアーキテクチャも同じ値として指定する必要があります。繰り返しますが、これは私ができるだけ早く入手する必要がある最近のリリースで私にとってうまくいったものです。両方ともTarget -> Build Settings -> Architecuresにあります。

また、設定から $(ARCHS_STANDARD_32_BIT) を削除する必要があることに注意してください。

于 2012-09-25T01:27:16.553 に答える
1

Target->Build Settings の OTHER_LDFLAGS の下に iOS6 シミュレーター アーキテクチャを設定することで、同様の問題を修正しました。

別々のアーキテクチャに対して別のコマンド ライン引数があったことを忘れていたので、手動でシミュレータを指定する必要がありました

于 2012-10-16T07:57:25.913 に答える