1

Cinder をダウンロードしてインストールし、TinderBox チュートリアルを実行して XCode で Cinder プロジェクトを作成しました。

ただし、Xcode ではなく、Eclipse を IDE として使用したいと考えています。

私はOSX 10.8.2を実行しています

次のチュートリアルに従って eclipse の構成 EclipseVimeo Videoを構成すると、コンパイルとリンクに関する多くの問題に遭遇しました。

make *** Error 1 C/C++ Problem cinder
undefined symbols for architecture i386:

チュートリアルの投稿を完全にフォローしていないか、セットアップに違いがあると思います。

注:これは質問回答の投稿です。

4

1 に答える 1

1

索引

  1. 日食を構成する
  2. 発生した問題と解決策
  3. 付録(ソースコード)
  4. 参考文献

** 日食の構成 **

C++ バージョンの Eclipse があり、基本的な C++ Cinder プロジェクトが作成されていることを前提としています。.h および .cpp ファイルは、以下の付録にあります。コンパイルするために必要な設定の概要を次に示します。

ステップ1。

  1. プロジェクトの「プロパティ」ウィンドウを開きます。
  2. [C/C++ ビルド] > [ビルド変数] オプションに移動します。

次の変数を追加します。

CINDER_PATH /path/to/cinder_0.8.4_mac/

ステップ2。

  1. [C/C++ ビルド] > [設定] ウィンドウに移動します。
  2. [ツール] タブで、[MacOS X C++ リンカー] オプションを選択します。

ここで、「コマンド」入力フィールドで、g++ の後にコマンド ライン オプションと OSX フレームワーク リファレンスを追加する必要があります。

g++ -m32 -arch i386 -framework Cocoa -framework IOKit -framework Accelerate -framework AudioToolbox -framework AudioUnit -framework CoreAudio -framework CoreVideo -framework CoreServices -framework QTKit -framework OpenGL -framework QuickTime -framework AppKit -framework Cocoa -framework CoreData -framework Foundation

-m32 64 ビットではなく 32 ビットを使用するようにリンクに指示します。

-arch i386正しいアーキテクチャへのリンクを保証します。

-framework Cinder を実行するために必要なフレームワークを参照します (現在理解しているように)

NOTE: Depending on your mac version you might find -framework Carbon in stead of -framework Cocoa, I used Cocoa. 

ステップ 3。

  1. [MacOS X C++ リンカー] > [ライブラリ] オプションに移動します。
  2. 次のライブラリ検索パスを追加します。( -L コマンドライン)

    ${CINDER_PATH}/lib
    ${CINDER_PATH}/lib/ios-sim
    ${CINDER_PATH}/lib/ios
    ${CINDER_PATH}/lib/macosx

次のライブラリを追加してインクルードします ( -l コマンド ライン)。

cinder
cinder_d
z
png14
pixman-1
cairo
boost_thread
boost_system
boost_filesystem
boost_date_time
cinder-iphone-sim_d

ステップ 4。

「MacOS X C++ Linker」メニューで「Miscellaneous」オプションを選択し、XLinker フィールドに以下を追加します。

${CINDER_PATH}/lib/libcinder_d.a

NOTE: It was adding this option along with the -arch i386 option that resolved this error "undefined symbols for architecture i386:"

ステップ 5。

  1. [GCC C++ コンパイラ] メニュー オプションを選択します。
  2. 「コマンド」フィールドに次を追加します。

    g++ -m32 -arch i386

[Includes] メニュー オプションを選択し、次のフォルダー パスを追加します。

${CINDER_PATH}/boost
${CINDER_PATH}/include
/System/Library/Frameworks

** 発生した問題と解決策 **

問題A

make *** Error 1 C/C++ Problem cinder
undefined symbols for architecture i386:

ソリューション A

この問題を解決するには、2 つの要因があることがわかりました。1 つ目は、-m32 および -arch i386 コマンド ライン オプションをリンカーとコンパイラの設定に追加することでした。

2 つ目は、次の -XLinker オプションを含めることです。

${CINDER_PATH}/lib/libcinder_d.a

注: 上記はデバッグ モード用です。リリース用 (_d) に設定する必要があります。

${CINDER_PATH}/lib/libcinder.a

** 付録 **

HelloWorld.h

#include "cinder/app/AppBasic.h"
#include "cinder/gl/gl.h"

using namespace ci;
using namespace ci::app;
using namespace std;


class HelloWorld : public AppBasic {
  public:
    void setup();
    void mouseDown( MouseEvent event );
    void update();
    void draw();
    void prepareSettings(Settings * settings);
};

HellowWorld.cpp

#include "HelloWorld.h"
// You dont' need this when you have the CINDER_APP_BASIC line below.
//int main(int argc, char **argv) {
//  return -1;
//}


void HelloWorld::setup()
{

}

void HelloWorld::mouseDown( MouseEvent event )
{
}

void HelloWorld::update()
{
}

void HelloWorld::draw()
{
    // clear out the window with black
    gl::clear( Color( 0, 0, 0 ) );
}

void HelloWorld::prepareSettings(Settings * settings)
{
    settings->setWindowSize( 800, 600 );
    settings->setFrameRate( 60.0f );
}

CINDER_APP_BASIC( HelloWorld, RendererGl )

参考文献

すべての功績は、そもそも私を助けてくれたこれらの投稿と、もちろん Cinder の作成者のおかげです。

  1. Cinder の Eclipse を構成するために従った元のチュートリアル
  2. 正しくリンクする問題を解決するのに役立ったリンク
于 2013-01-17T12:16:09.790 に答える