图形开发之cairo库的编译

本文介绍在MacOS Mountain Lion 10.8及更高版本上使用MacPorts编译cairo库及其依赖项的方法,包括如何卸载旧版本、更新MacPorts、编译配置等步骤。

         笔者这几天一直在研究如何编译cairo库,直到今晚终于搞定了。下面将总结跟大家分享一下。

         在这里,笔者先分享一下失败的经验,开始笔者是按照cairo官网的一篇教程来尝试安装的,http://cairographics.org/end_to_end_build_for_mac_os_x/   ,如果你也看过了这篇教程,并尝试安装其思路去安装的话,在这里笔者不得不提醒一下你,你走了弯路了~~但愿你在折腾漫长的时间之后能编译成功,cairo是一个如此大的家伙,光依赖库就有11个之多。如果你的需求跟官方教程的作者不符合的话,或者你的安装环境是Mac OS Mountain lion 10.8以上的话,或者你想要编译所有的依赖库都是最新的版本的话,或者你想要编译一个universal版本以适用multiple architectures的库,总之,想要按该教程来编译的话,你需要克服许多许多编译难题。笔者在这步折腾了几个晚上,最终不得不放弃,走回MacPorts来进行编译的正途上来。

        这次的目标是采用MacPorts来将cairo及其依赖库编译成能在Xcode 或者其他的IDE(比如:eclipse)识别并适用multiple architectures的.a静态库。在开始本篇教程之前,如果你看过笔者的上一篇关于cairo的简介的文章,并安装了cairo库。在这里笔者不得不告诉你,你可能需要先卸载cairo(因为其安装的版本不对)。

        打开终端输入,port info cairo ,查看cairo库的依赖关系

      

       在这里可以看到cairo库的依赖库有libpixman,glib2,fontconfig,freetype,libpng,zlib,lzo2,expat,xrender,xorg-libXext,xorg-xcb-util,而且cairo库的版本分为opengl,quartz,universal,[+]x11四个版本。

      接着在终端输入一下命令并回车:

sudo port -f uninstall cairo
sudo port clean --all cairo
sudo port -f uninstall libpixman
sudo port clean --all libpixman
sudo port -f uninstall glib2
sudo port clean --all glib2
sudo port -f  uninstall fontconfig
sudo port clean --all fontconfig
sudo port -f uninstall freetype
sudo port clean --all freetype
sudo port -f uninstall libpng
sudo port clean --all libpng
sudo port -f uninstall zlib
sudo port clean --all zlib
sudo port -f uninstall lzo2
sudo port clean --all lzo2
sudo port -f uninstall expat
sudo port clean --all expat
sudo port -f uninstall xrender
sudo port clean --all xrender
sudo port -f uninstall xorg-libXext
sudo port clean --all xorg-libXext
sudo port -f uninstall xorg-xcb-until
sudo port clean --all xorg-xcb-until
       囧,一串长长的命令行 ~~~~不过,如果已经安装了cairo的,为了下面的编译顺利进行,建议还是先卸载清理下。

       在进行编译之前,笔者建议读者先点击左上角的苹果图标,选择Software update来更新自己的Mac OS Mountain lion 和Xcode到最新的版本先(因为MacPorts官方文档提醒过如果Xcode过期的话,用MacPorts来安装软件可能会出错),如下图:

   


        好了,如果你的系统和Xcode已经更新到最新版本并重新启动后,接着进行下一步,打开终端,输入:sudo port selfupdate来更新本地的软件树,同时更新MacPorts自己到最新版本,这一步很重要,否则可能由于本地软件树版本过期导致后边安装出错

       接下来可以正式使用MacPorts来编译cairo库了,在终端输入:port variants cairo,可以看到关于cairo的详细版本说明,其中universal版本的说明是“Build for multiple architectures”,显然,这是我们的目标版本。接着在终端输入:sudo port -v install cairo +universal,开始了漫长的编译,笔者估计一切顺利的话,编译成功至少需要半个小时以上,如果不幸中途你的网络出了问题,或者编译出错,来回折腾可能需要一个小时以上。所以,别干等着了,泡上一杯咖啡,拿一本书出来看吧~或者休息一下,出去散散步,或者洗个澡,回来后,再查看是编译成功还是出错了~~~笔者就是傻乎乎的守着终端,看着屏幕刷啊刷了半个小时,然后出了点错误,解决后重新编译又花了20多分钟。最终用了将近一个半小时才编译成功~What a big guy! 

        在这里提一下笔者碰到小问题,是因为MacPorts下载的libpng的压缩文件损坏了,不知道是因为之前的安装cairo卸载没清理干净残存的还是因为新编译下载的文件就是损坏的,笔者这里解决的方式很简单,就是将路径 : /opt/local/var/macports/distfiles/libpng/目录下的libpng损坏的压缩文件删除,并去libpng的官网(链接:http://www.libpng.org/pub/png/libpng.html)下载最新版本的压缩文件放到该目录下,然后重新在终端输入sudo port -v install cairo +universal,再次等待编译。如下图示:

       

      最后当你看到如下图示的结尾时,恭喜你,你终于成功编译了这个大家伙~~~

      


            你可以到路径: /opt/local/lib路径里查看编译好的相关的libcairo、libpixman、glib2、fontconfig、freetype、libpng、zlib,lzo2、expat、xrender、xorg-libXext、xorg-xcb-util等相关库都copy到一个新建Frameworks 中去,方便以后使用,如下图示:

       

         基本上编译好的库可以分为三类,.dylib动态库,.la动态库、.a静态库。

        关于.dylib动态库,在Xcode.app右键,show Package Contents. 然后分别放在Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib、或Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/usr/lib、或Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/usr/lib、或Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/usr/lib、或Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/usr/lib、或Contents/Developer/PlatformsMacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/lib、或Contents/Developer/PlatformsMacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib目录下来使用,这样的话,会直接显示在如下的列表中


         另外如果不将.dylib库放在以上目录也可以选择Add Other直接将.dylib 或  .a静态库加入新建的Xcode工程中去使用。如下图

            尝试编译Xcode工程,没有任何警告和错误,Congratulations!

            如果有类似警告:ignoring file  libpng15.a, file was built for archive which is not the architecture being linked (i386):  libpng15.a,这表明你编译的不是一个multiple architectures的库,Bad luck!你又得花费大量的时间重新编译~

            好了,本篇到这里结束~~~~  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值