编译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终于出世了。


————————————————————————————

上面的那个无法解析的符号,到现在依旧无法解释,有知道的朋友,不吝赐教哈。

0 0
原创粉丝点击