13

多くの人が気づいたように; zxing が最新の xcode (4.5/ios 6) で機能しない

ユースケースは次のとおりです。

  1. トランクから最新バージョンをチェックアウトします (いくつかの修正が既に追加されているため)
  2. iOS 6.0を使用してxcode 4.5でシングルビューアプリケーションを作成する
  3. README を使用して、依存関係、パスなどを追加します (手順に従ってください)
  4. クラスに zxingcontroller 呼び出しを追加 (名前を mm に変更)

シミュレーターとデバイスの両方でコンパイルが失敗します。次のような 31 エラーが表示されます。

Undefined symbols for architecture i386:
  "std::string::c_str() const", referenced from

31 個のエラーはすべて類似しており、違いはシンボル名にあります

誰かがこのユースケースでそれを解決する方法を知っているでしょうか?

ps以前のXcodeのアプリがあれば動作します。問題は、Xcode 4.5 で新しいアプリを作成した場合のみです。

4

3 に答える 3

32

あなたが遭遇した問題は、C++ 標準ライブラリに関連しているようです。

実際、標準ライブラリ オブジェクト (例: ) との関係でリンカー エラーが発生したstd::string場合は、リンクされたすべてのライブラリと app-project 自体のプロジェクト設定を確認する必要があります。通常は一致する必要があります。

元の ScanTest (サブプロジェクトとして ZXingWidget をビルドする) は次の設定を使用します。ライブラリをそのまま使用する場合は、アプリのビルド設定と一致する必要があります。

念のため、Xcode 4.5 を使用して新しいプロジェクトを作成しました。そのプロジェクトは ZXingWidget をサブプロジェクトとしてではなくビルド済みライブラリとして使用します - 私は自分のものではないもののサブプロジェクトは好きではありません - この専門は結果に影響を与えません.

重要な設定はC++ 標準ライブラリです-コンパイラのデフォルトに設定されていることを確認してください

ここに画像の説明を入力


少し説明

実際には、 C++ 標準ライブラリを使用する必要はありません。C++11 をサポートする LLVM C++ 標準ライブラリを使用することもできます。ただし、プロジェクトにリンクするすべてのプロジェクト、サブプロジェクト、およびライブラリで、まったく同じライブラリを使用する必要があります。そのため、そのライブラリのより新しいバージョン (C++11 サポート) を使用することを主張する場合は、それらの設定で ZXing ライブラリもビルドする必要があります。


最後になりましたが、アーキテクチャ有効なアーキテクチャの設定がすべてのプロジェクトとサブ プロジェクトで一致していることを確認してください (一般的なarmv7sリンカーの問題を修正します)。

まず、アーキテクチャ設定がarmv7 armv7sすべてのプロジェクト内で設定されていることを確認してください。次に、すべてのプロジェクトのプロジェクト設定をValid Architecture armv7s armv7に向けて編集します。

ここに画像の説明を入力

于 2012-10-01T00:00:44.377 に答える
2

「その他の警告フラグ」-Werror をオフに切り替えることもできます。Xcode バージョン > 4.5 (LLVM コンパイラ > 4.1) で必要なようです。

于 2012-11-05T10:56:56.070 に答える
0

プロジェクト ターゲットの [ビルド設定] タブにある [その他のリンカー フラグ] のリストで -lstdc++ を有効にしましたか? zXing のビルドに必要な c++ シンボルを認識していないようです。この場合、上記のアドバイスが役立つはずです。

于 2012-09-30T23:32:43.303 に答える