编译libcurl
来源:互联网 发布:英文写作软件 编辑:程序博客网 时间:2024/05/21 09:08
最近,由于公司需求,需要将游戏接入公司账户中心。给出了一个账号中心接口文档。大概类似如下:
http://passport.xxxx.com/headapi/clientloginoper?username=123456789@xxx.com&password=123123&format=json
返回格式是json格式。
如果后端采用c++写的,第一时间想到libcurl,由于项目本身依赖第三方库逐渐增多,实在对引入更多的库,心有余悸。还好只是在login服务器上。
开始整libcurl,由于以前没有搞过这玩意,我知道php对这个支持很好,先下源码:
http://curl.haxx.se/download.html
按照下载向导,选择相应的平台,相应系统。发现window下的就没有符合要求的,自己编译吧。这种跨平台的真是对ms太不友善的(后来觉得还是可以
的,照顾了一下ms)
你要完整的编译一个libcurl,还需要先编译一下他的依赖库openssl,libssh2。当然这个不是必须的。
openssl 最新的版本是OpenSSL 1.0.1h,
http://www.openssl.org/source/
编译openssl的方法:
先看看INSTALL.W64里面有相关的步骤,发觉需要安装perl,继续
http://www.perl.org/get.html
balabala 装完,这个还比较傻瓜。
> perl Configure VC-WIN64A
> ms\do_win64a
> nmake -f ms\ntdll.mak
> cd out32dll
> ..\ms\test
由于是64位OS,就选择这个了,其实感觉应该还是编译32位的,因为很多依赖他的libcurl就没有区分32,64。到目前为止,openssl编译结束。lib都在out32dll里了
接下来是编译libssh2
http://www.libssh2.org/
这个还好,里面有老的vs项目工程文件,直接升级后,编译静态库,没什么可说的。虽然该静态库也依赖了openssl,但是不需要link openssl,静态库不能嵌套包含
最后开始我们的libcurl。这个需要花点时间,编译方法还真不好找。我用的curl-7.37.0版本。
在项目目录下projects\Windows\下,有相关各版本vs的工程文件,但是我用他编译出现我无法解释的情况,我想不到哪里有问题。
1>openssl.obj : error LNK2019: unresolved external symbol _SSL_peek referenced in function _Curl_ossl_check_cxn
1>openssl.obj : error LNK2019: unresolved external symbol _SSL_write referenced in function _ossl_send
1>openssl.obj : error LNK2019: unresolved external symbol _SSL_ctrl referenced in function _ossl_connect_step1
1>openssl.obj : error LNK2019: unresolved external symbol _SSL_CTX_ctrl referenced in function _ossl_connect_step1
1>openssl.obj : error LNK2019: unresolved external symbol _SSL_CTX_callback_ctrl referenced in function _ossl_connect_step1
1>openssl.obj : error LNK2019: unresolved external symbol _SSL_get_error referenced in function _Curl_ossl_shutdown
1>openssl.obj : error LNK2019: unresolved external symbol _SSLv3_client_method referenced in function _ossl_connect_step1
类似的无法解析的符号,有160多个,我想该包含的库都写上了,
ssleay32.lib
libeay32.lib
libssh2d.lib
而且我用的是静态连接的c连接方式,我也用dumpbin看了lib里的导出符号,都是不带前下横线的,但是这里却引用带前下横线的,倍感疑惑。
看openssl里的包含项,是
extern "c"
想来想去不明白为啥。这种情况折磨了好长时间。
最后看了http://blog.csdn.net/b_h_l/article/details/19985061的文章后,
采用这种方式成功编译出lib
nmake /f Makefile.vc10 [debug|release|debug_ssl] 选项挺多的,具体的可以打开Makefile.vc10看里面的说明。看了下脚本,其实vc10在里面用处不大,虽然
我用的是vc11也可以用这个脚本正常跑。
ok,最后lib终于出世了。
————————————————————————————
上面的那个无法解析的符号,到现在依旧无法解释,有知道的朋友,不吝赐教哈。
- 编译libcurl
- 编译libcurl
- libcurl编译
- 编译libcurl
- VC6编译LibCurl
- android 编译 LIBCURL 库
- libcurl windows上编译
- debian7编译libcurl
- linux下编译libcurl
- libcurl静态库编译
- android ndk 编译 libcurl
- libcurl 编译详解
- vs2010编译libcurl
- libcurl源码编译
- 交叉编译libcurl
- libcurl源代码编译
- vs2010 编译libcurl库
- VS2008 编译Libcurl
- java IO总结之字符流操作文件读写(高效)
- 如何得到Selenium2/Webdriver: FirefoxProfile设置属性的key-value
- iOS7上tableView的分割线左边短了一点
- 接下来安排
- Union
- 编译libcurl
- 输入内容的有效性
- 安卓实现所有activity全部销毁
- 单选UIbutton的实现
- [leetcode 3] Longest Substring Without Repeating Characters
- 发现一个设置tableview位置的问题
- PCM 数据中的大/小端 与 MSB/LSB
- 20140702
- jQuery遍历