在cocos2d-x中编译/调试curl库

环境参数

系统:mac os x10.6

xocde:4.0.2

ios sdk:4.3

curl:curl-7.22.0

不知道curl是做什么的,就自己google了,这里暂时不纠结这个问题。

因一个cocos2d-x项目需要使用curl库,但是curl官方并没有直接支持ios,所以需要自己编译,另外,为了方便调试,所以不直接使用变异好的.a文件,而是在项目中引入curl静态库。

下载curl库

官方有各种语言版本的curl库,这里我们选择C\C++版本的;这里我们下载最新的curl-7.22.0版本,下载之后解压可以得到curl-7.22.0目录。

下载地址:http://curl.haxx.se/download.html

配置curl

1:从终端进入解压得到的curl-7.22.0文件夹"cd curl-7.22.0"

2:输入如下命令,完成curl的配置:

复制代码
  1. export CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-gcc-4.0.1
  2. export CFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk"
  3. export LDFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -Wl,-syslibroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk"
  4. export CPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp
  5. ./configure --disable-shared --without-ssl --without-libssh2 --without-ca-bundle --without-ldap --disable-ldap --host=arm-apple-darwin10

注意:这里需要根据自己的实际环境设置ios sdk的安装路径,同时,这里仅仅是配置了单独的curl库,如果需要使用ssl等其他功能,配置参数需要修改,这里暂时不使用。^_^

完成之后出现如下所示,则表示设置正确:

编译curl

1:在xcode中新建curl工程:File->New Project->iOS->Library->Cocoa Touch Static Library;

2:添加文件:添加文件:Add->Existing Files (选择curl-7.22.0中 "src"文件夹),Add->Existing Files (选择curl-7.22.0中 "lib"文件夹);

3:删除文件:从项目中删除 "src/macos" 文件夹(Delete->Delete references),并且去掉Makefile and Makefile.inc(共四个,src和lib中各两个)的"target"标志;

4:设置编译选项,打开项目的"build"选项,查找"OTHER C FLAGS",并设置如下参数:

-DHAVE_CONFIG_H -I/xxx/curl-7.22.0/include -I/xxx/curl-7.22.0/lib

注意:"/xxx/curl-7.22.0"即是刚刚解压的curl-7.22.0的路径

5:编译,应该会成功,不成功则检查每一步是否设置正确了。

在cocos2d-x项目中加入curl静态库

1:新建cocos2d-x项目,这个不多说了。

2:将上面准备好的curl项目中的"curl.xcodeproj"拖到cocos2d-x的项目中,如下图所示:

3:添加链接库:在cocos2d-x的项目中,打开"target",选择"build phase",找到"link library with...",加添,在"workspace"中可以找到我们刚刚准备的"libcurl.a",添加进来。

4:设置头文件搜索路径:在cocos2d-x项目中找到build setting中的header search path,并设置路径为刚才解压的curl路径中的"curl-7.22.0/include",注意,这个要根据自己实际的路径来设置。

5:测试curl库是否添加成功,在cocos2d-x项目中的cpp文件中添加如下代码:

复制代码
  1. #include <curl/curl.h>
  2. // Test linking with curl
  3. {
  4. curl_global_init(CURL_GLOBAL_DEFAULT);
  5. CURL* handle = curl_easy_init();
  6. curl_easy_cleanup(handle);
  7. }

6:编译,不出意外的话,编译应该会成功,如果不成功,请仔细检查上面每一步的操作是否正确。

好了,这就写完了,其实如果你不想编译,也可以使用别人已经编译好的头文件和.a文件,但是那样就不方便调试,根据自己喜好去选择吧。

如果你要使用别人编译好的,或者更简单的编译方式可以参考http://code.google.com/p/ios-static-libraries/,不过得注意在不同的构架下使用不同的头文件和.a文件(自己在header search paths和library search paths中设置不同的构架即可),也可以使用lipo工具将几种构架合并起来。

相关推荐
_ZHOURUI_H_2 天前
Unity TCP底层极限拆解:粘包、半包、CRC、序列号、双缓冲到底怎么一起工作的?
网络·网络协议·tcp/ip·游戏·unity·游戏引擎·游戏开发
qq_170264752 天前
unity里GameObject和Texture的内存归属
java·unity·游戏引擎
weixin_404679312 天前
godot + vscode ai开发
ide·vscode·编辑器·游戏引擎·godot
还是大剑师兰特3 天前
Unity3D(Unity)完整详细介绍
unity·游戏引擎
还是大剑师兰特3 天前
Unity 从零搭建简易3D场景(新手分步教程)
3d·unity·游戏引擎
神码编程3 天前
【Unity】TankBattle联机坦克大战(三)创建关卡(生成地块)
unity·游戏引擎·帧同步·坦克大战
神码编程3 天前
【Unity】TankBattle联机坦克大战(四)坦克的核心功能(上)
unity·游戏引擎·帧同步·坦克大战
玖玥拾4 天前
Unity3D RPG 入门项目(四)背包拖拽、物品悬浮提示、项目开发思维
3d·unity·游戏引擎
做萤石二次开发的哈哈4 天前
开发者如何调用 ERTC iOS API 完成 SDK 初始化配置?
macos·objective-c·cocoa
xcLeigh4 天前
Unity基础:Start与Update方法——Unity脚本生命周期初探
java·unity·游戏引擎·教程