1

我已经下载并安装了 Cinder,甚至还运行了 TinderBox 教程以在 XCode 中创建一个 Cinder 项目。

但是我热衷于使用 eclipse 作为我的 IDE 而不是 Xcode。

我正在运行 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. 参考

** 配置 Eclipse **

假设您有一个 C++ 版本的 eclipse 并且已经创建了一个基本的 C++ Cinder 项目。您可以在下面的附录中找到 .h 和 .cpp 文件。下面概述了编译时需要配置的设置。

第1步。

  1. 打开项目“属性”窗口。
  2. 导航到 C/C++ Build > 'Build Variables' 选项。

添加以下变量。

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告诉链接使用 32 位而不是 64 位。

-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

选择“包含”菜单选项并添加以下文件夹路径

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

**遇到的问题及解决方案**

问题A

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

解决方案 A

我发现克服这个问题有两个促成因素。第一个是将 -m32 和 -arch i386 命令行选项添加到链接器和编译器设置中。

第二个是包含以下 -XLinker 选项

${CINDER_PATH}/lib/libcinder_d.a

注意:以上是调试模式,(_d)发布你必须将它设置为

${CINDER_PATH}/lib/libcinder.a

** 附录 **

你好世界.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 回答