加载中…
个人资料
南冠彤
南冠彤
  • 博客等级:
  • 博客积分:0
  • 博客访问:415,028
  • 关注人气:59
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

(转)vs2010 libcurl 7.21.3 zlib 1.2.5 openssl 1.0.0c 编译全过程

(2012-05-05 11:10:40)
标签:

杂谈

分类: CPP/C

http://blog.csdn.net/flyliying/article/details/6138300

目的:编译出libcurl.dll 7.21.3 (with zlib openssl)

如果不追求最新版本,在http://curl.haxx.se/download/libcurl-7.19.3-win32-ssl-msvc.zip 这里可以下载7.19.3的版本。

如果不需要zlib ssl功能,直接编译curl-7.21.3自带的vc6工程即可。

 

1 下载文件

1.1 libcurl

下载页面

http://curl.haxx.se/download.html

下载地址

http://curl.haxx.se/download/curl-7.21.3.zip

 

1.2 zlib

下载页面

http://zlib.net/

下载地址

http://zlib.net/zlib125.zip

 

1.3 openssl

下载页面

http://www.openssl.org/source/

下载地址

http://www.openssl.org/source/openssl-1.0.0c.tar.gz

编译openssl还需下载ActivePerl

官方下载

http://www.activestate.com/activeperl/downloads

国内推荐下载

http://www.newhua.com/soft/8364.htm

 

2 解压及安装文件

2.1 ActivePerl安装,双击直接下一步,默认设置到底。

2.2 zlib openssl libcurl分别解压,最后的目录层次如图,他们三个在同一级

 

3 编译过程

3.1 zlib编译

用vs2010打开zlib-1.2.5/old/visualc6/zlib.dsw,选择DLL_Release编译,把编译生成的zlib-1.2.5/old/visualc6/Win32_DLL_Release/ zlib1.lib 复制到curl-7.21.3/lib目录下,重命名为zdll.lib

 

3.2 openssl编译

打开cmd,cd到openssl-1.0.0c目录下;

运行命令perl Configure VC-WIN32

再运行   ms/do_ms

把C:/Program Files/Microsoft Visual Studio 10.0/VC/bin/vcvars32.bat拖入到cmd窗口按回车

运行命令 nmake -f ms/ntdll.mak

打完收工!

参考资料:openssl-1.0.0c/INSTALL.W32

 

3.3 编译curl-7.21.3

在curl-7.21.3/lib目录下新建release.bat,输入以下内容

call "C:/Program Files/Microsoft Visual Studio 10.0/VC/bin/vcvars32.bat"
set CFG=release-dll-ssl-dll-zlib-dll
set OPENSSL_PATH=../../openssl-1.0.0c
set ZLIB_PATH=../../zlib-1.2.5
nmake -f Makefile.vc10

保存,然后运行。

参考资料:curl-7.21.3/docs/INSTALL

 

在curl-7.21.3/lib/release-dll-ssl-dll-zlib-dll目录下就能看到libcurl_imp.lib和libcurl.dll了。

另附上一套已经编译好的dll,在我的资源http://download.csdn.net/source/2982867 里面。





http://shootingstars.cnblogs.com/archive/2006/02/17/332276.html

如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)
1、安装ActivePerl//初始化的时候,需要用到perl解释器
2、使用VS2005下的Visual Studio 2005 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)
3、解压缩openssl的包,进入openssl的目录
4、perl configure VC-WIN32
尽量在这个目录下执行该命令,否则找不到Configure文件,或者指定完整的Configure文件路径。
5、ms\do_ms
在解压目录下执行ms\do_ms命令
6、nmake -f ms\ntdll.mak

编译后
在openssl解压目录下执行,完成编译后。输出的文件在out32dll里面,包括应用程序的可执行文件、lib文件和dll文件

注 意:在运行第五步时,cl编译器会抱怨说.\crypto\des\enc_read.c文件的read是The POSIX name for this item is deprecated(不被推荐的),建议使用_read。呵呵,我可不想将OpenSSL中的所有的read函数修改为_read。再看cl的错误代码 error C2220,于是上MSDN上查找:
warning treated as error - no object file generated
/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.
是由于设置了/WX选项,将所有的警告都作为错误对待,所以。。。

于是打开OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,存盘。。。
继续执行nmake -f ms\ntdll.mak

于是成功。。。
(我下载的是openssl-0.9.8a版本)




------------

之前没用过库,以为下下来之后,把头文件和cpp文件都加进工程里,搞好include就行。

库是在linux下写的,我与linux下专用的那些函数及头文件搏斗了很久,后来发现,库里面有用#ifdef判断当前系统的,根本不用我瞎折腾。。。

 

但是还是很多error,尤其是改了几个头文件后,VS2005几乎死掉,报了1900多个error全在gl.h里。。。。可是这是OPENGL的头文件啊怎么可能错。。。

而后百般搜索后发现,原来要自己编译,生成lib文件,再加到项目里,在代码中写上

#pragma comment(lib, "trimesh.lib")

或者在项目属性的链接-输入里设置。然后我意识到OPENGL和OPENCV都是这么搞的,突然感觉自己很小白。。。

 

glui库搞定了,但trimesh2库只提供了.a文件,VS用不了。后来发现有提供MSVC版本,下下来之后不能运行,因为是VS2008。。。

好在源代码里已经有了lib文件,我添加到项目里,于是变成了link error。

 

中间还有个小插曲,就是trimesh2带了freeglut用来替换glut,它通过自己写的glut.h来实现的。到底是#include <GL/glut.h>还是#include “GL/glut.h”,这导致了我的各种混乱,也是造成gl.h很多error的原因。

最后我直接将trimesh2里gl文件夹下的所有头文件拿去VC的目录下覆盖了。。。原来的glut.h丢了就丢了吧。。。

 

但link error还是没有解决,而后我想是不是链接库也是有顺序的,于是先链接gluit.lib再链接trimesh.lib,这次错误换了,只一条,unrecognized flag '-typedil' in 'p2',生成代码失败。

 

在网上百般寻觅发现有人说这是VS2005的问题,于是用同学的VS2008实验了一下,居然能运行了,能运行了!!我对着她的电脑内牛满面,这就是搞了我一天的错误么T_T

果断装VS2008,但满怀激动的跑程序,还是生成代码失败,Il mismatch between 'P1' version '20080116' and 'P2' version '20070207'。。。

好在遇到此问题的人不在少数,VS2008需要打一个SP1的补丁,我打上之后,程序便可以运行了。

 

只是结果不对。。 莔rz

开始是示例程序,每次读取face都失败,因为是空的。但是节点数量和坐标貌似正确。我换用一个正方体,发觉vertex数组的大小很奇怪,但输出的vertex.size()是8,坐标也都貌似正确。

这下彻底混乱了。这是trimesh2给的一段示例代码无比简单,怎么会不对呢?可对着lib又不能单步调试,眼看着输出结果和调试观察中的各种诡异不匹配,我真想一头撞死得了。

 

中间想过到底要继续试这个库,还是自己重写算了。两种都很浪费时间,我耗不起。

 

最后抱着试一试的态度编译了一把trimesh2,发现只生成了一个文件trimeshd.lib。想起以前QT的lib,好像是debug版都会在后面加个d。我心里突然又有了点希望,会不会我出现error是因为在debug下调用trimesh.lib。

果断换库,原本想着没有生成gluit.lib,不如把这个也删了,结果link error重现。只改了trimesh.lib,成功运行。


0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有