在Mac OS X上编译Clutter
在MacPorts上已经有Clutter,但是编译和链接tests里面的c文件时报错,说是找不到_main的定义。定义在clutter-main.c里面,但是不知道为什么port编译后的库里面找不到这个引用。
于是自己编译。其实参考port的定义就很容易了:
./configure –with-flavour=osx –enable-introspection=no –disable-gtk-doc
这里和port不同的是用的是osx,而port用的是glx。然后make就没有错误了,可能刚开始运行port install clutter时把一些依赖的库比如cairo, mesa都安装了,这次才会这么顺利。
照提示的信息看,osx的这种beckend现在还是实验性的,尝试运行了clutter/tests/interactive,有的有问题,有的没有问题。下面是test-cairo-flowers的截图:(后来发现官方文档对这已经有描述了。。。)
最新For Lion: 这里有有份官方文档,看来这还真是混乱。现在configurate的时候会出现新的问题:
Requested ‘cogl-1.0 >= 1.9.6′ but version of COGL is 1.6.20
cogl是clutter自身带的,居然没有找到。我没有办法,只能把这些依赖从configurate里面删除。但是make时候出现错误“error: cogl/cogl.h: No such file or directory”,看来cogl不是clutter自带的,于是我试了下
git clone git://git.gnome.org/cogl
果然有这个项目,日啊。编译时用“./configure –prefix=/opt/local –disable-introspection”,否则又会有glib的错误。sudo make install后再回到clutter下面重新configure,果然cogl的错误信息没有了。
接下来在make clutter的时候,又出现错误:
‘trackingRect’ undeclared (first use in this function)
这个好像是objective-c代码上的问题,得修改代码么?痛苦啊。看了下,将就改成下面的。
- (NSTrackingRectTag) trackingRect { return tracking_rect; } - (void) dealloc { if (tracking_rect) { [self removeTrackingRect:tracking_rect]; tracking_rect = 0; } [super dealloc]; } /* - (void) dealloc { if (trackingRect) { [self removeTrackingRect:trackingRect]; trackingRect = 0; } [super dealloc]; } */
make;make install现在都没有问题。不过在运行test case时出现问题,跳出一个X11的窗口,奇怪啊。