11

iOS->Framework&Library->Cocoa Touch Static Libraryxcode 4.6を使用してオブジェクト C 静的ライブラリを構築する方法を知っています。このチュートリアルの助けを借りて簡単に作成できますiOS チュートリアルで静的ライブラリを作成します。ただし、io アプリケーション用の純粋な C++ スタティック ライブラリをビルドして使用する方法はよくわかりません。C++ スタティック ライブラリをビルドする場合も iOS->Framework&Library->Cocoa Touch Static Libraryガイドラインを使用します。相違点は、スタティック ライブラリ プロジェクトを作成するときにすべての .h ファイルと .m ファイルを削除してから、すべての C++ スタティック ライブラリ ヘッド ファイルと実装ファイルをプロジェクトに配置することです。 . 非常に簡単な例は次のとおりです。

こんにちは。

#include <iostream>
void say_hello();

こんにちは.cpp

#include "hello.h"

void say_hello()
{
std::cout<<"hello"<<std::endl;
}

hello.a動作しているようで、 iPhone 6.1 Simulator 用の静的ライブラリをビルドできます。次のステップは、静的ライブラリを呼び出すアプリケーションを構築することです。シンプルな iPhone 6.1 シミュレーターを作成し、次のコードを使用して、ファイル内の静的ライブラリーiOS application->Single View Applicationを呼び出し ます (C++ 関数を呼び出すことができるように、ViewController.m を ViewController.mm に変更します)。hello.aViewController.mm

say_hello();

ただし、1 つの警告と 2 つのエラー メッセージを受け取りました。

警告:

ld: warning: ignoring file hello.a, file was built for archive which is not the architecture being linked (i386): 

エラー 1:

hello.a
Undefined symbols for architecture i386:
  "say_hello()", referenced from:
      -[ViewController viewDidLoad] in ViewController.o

エラー 2:

ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

次に、この実験に関連するいくつかの質問があります。

  • 純粋な C++ 静的ライブラリを作成するのは正しい方法ですか?
  • C++ スタティック ライブラリを呼び出す方法に何か問題がありますか?

  • 私の例では、静的ライブラリを呼び出すときに、どうすればリンク エラーを解決できますか?

どうもありがとう。

4

3 に答える 3

1

.a が i386 または armv7 でビルドされていることに注意してください。一般に、両方のバージョンをビルドし、それらを 1 つに結合する必要があります。このように: lipo -create -output libopencore-amrwb.a libopencore-amrwb-armv7.a libopencore-amrwb-i386.a

于 2013-11-22T07:43:22.053 に答える
1

私は現在あなたと同じことをしています。ここで説明したのと同じ問題がありましたが、実際には同じ2つのエラーがありました。

ライブラリを構築するときは、それをどこで使用するか (iOS デバイスまたはシミュレーター) を念頭に置く必要があります。さまざまなケースに合わせてビルドする必要があるため、これは重要です。これは非常に簡単です。ライブラリをビルドするときは、「Select Scheme」をチェックするだけです。

実際のデバイスで使用する場合:

ここに画像の説明を入力

シミュレーターでテストするには、次を使用します。

ここに画像の説明を入力

ビルド後、作成したファイルをライブラリを使用するプロジェクトにドラッグ アンド ドロップするだけで準備完了です。

于 2014-08-26T15:40:13.967 に答える