我已经下载并安装了Cinder,甚至在XCode中运行了TinderBox教程来创建Cinder项目。
然而,我热衷于使用eclipse作为我的IDE,而不是Xcode。
我正在运行OSX 10.8.2
在遵循以下教程配置eclipse Configure Eclipse和Vimeo Video之后,我遇到了许多编译和链接问题。
make *** Error 1 C/C++ Problem cinder
undefined symbols for architecture i386:我认为我要么没有完全遵循教程的帖子,要么在我的设置中有一些不同。
注意:这是一个问答帖子。
发布于 2013-01-17 20:16:10
索引
遇到的eclipse
**配置eclipse **
假设您有一个eclipse的C++版本,并创建了一个基本的C++ Cinder项目。您可以在下面的附录中找到.h和.cpp文件。下面概述了需要配置才能进行编译的设置。
步骤1.
在C/C++ Build > 'Build Variables‘选项中打开项目’window.
添加以下变量。
CINDER_PATH /path/to/cinder_0.8.4_mac/步骤2.
在这里,在‘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.
${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++链接器”菜单下,选择“其他”选项,并在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.
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
我发现有两个因素有助于克服这个问题。第一个是将-m32和-arch i386命令行选项添加到链接器和编译器设置。
第二个是包含以下-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的创建者。
https://stackoverflow.com/questions/14378905
复制相似问题