Windows下编译libcurl.lib静态库

1.下载最新版的libcurl,我的是curl-7.44.0.zip,解压,进入目录winbuild,仔细阅读BUILD.WINDOWS.txt这篇文档

打开VS2013 开发人员命令提示并执行nmake /f Makefile.vc mode=static VC=12

完成编译后libcurl静态库会出现在builds目录下包括头文件和libcurl_a.lib,我们需要的是builds/libcurl-vc12-x86-release-static-ipv6-sspi-winssl下面的include和lib两个文件夹

文档里面一段这样的话

Static linking of Microsoft‘s C RunTime (CRT):

==============================================

If you are using mode=static nmake will create and link to the static build of

libcurl but *not* the static CRT. If you must you can force nmake to link in

the static CRT by passing RTLIBCFG=static. Typically you shouldn‘t use that

option, and nmake will default to the DLL CRT. RTLIBCFG is rarely used and

therefore rarely tested. When passing RTLIBCFG for a configuration that was

already built but not with that option, or if the option was specified

differently, you must destroy the build directory containing the configuration

so that nmake can build it from scratch.

VS生成代码的时候有一个运行库选项(项目属性 - 配置属性 - C/C++ - 代码生成 - 运行库)/MT和/MD(/MTd和/MDd是对应的debug版本)

就是说你编译时如果加了RTLIBCFG=static这个选项,就相当于编译了/MT版本的libcurl,否则是/MD版本的

2.打开VS2013新建项目选择Win32控制台应用程序,附加选项选择空项目

然后把前面编译出来的头文件夹和lib文件夹复制到项目所在路径。工程右键添加-现有项,把libcurl_a.lib加入工程

新建一个cpp文件,测试一下能否使用

#include "include/curl/curl.h"

int main()
{
	curl_easy_init();
	return 0;
}

报错:

error LNK2019: 无法解析的外部符号 __imp__curl_easy_init,该符号在函数 _main 中被引用

fatal error LNK1120: 1 个无法解析的外部命令

libcurl没有链接到程序中,找不到这个函数入口

解决方案:打开项目属性,配置属性 - C/C++ - 预处理器 - 预处理器定义 - 打开下拉框 - 编辑 - 文本框输入CURL_STATICLIB - 保存

重新编译

报错:

1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(lseeki64.obj) : error LNK2005: __lseeki64 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(dosmap.obj) : error LNK2005: __errno 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(tolower.obj) : error LNK2005: _tolower 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(wsetloca.obj) : error LNK2005: __configthreadlocale 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(mlock.obj) : error LNK2005: __lock 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(winapisupp.obj) : error LNK2005: ___crtSetUnhandledExceptionFilter 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(winapisupp.obj) : error LNK2005: ___crtTerminateProcess 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(winapisupp.obj) : error LNK2005: ___crtUnhandledException 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(_file.obj) : error LNK2005: ___iob_func 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" ([email protected]@YAXXZ) 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a 已经在 MSVCRTD.lib(cinitexe.obj) 中定义

1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z 已经在 MSVCRTD.lib(cinitexe.obj) 中定义

1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a 已经在 MSVCRTD.lib(cinitexe.obj) 中定义

1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z 已经在 MSVCRTD.lib(cinitexe.obj) 中定义

1>LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LIBCMT.lib(fflush.obj) : error LNK2005: _fflush 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义

1>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

1>LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

1>e:\documents\visual studio 2013\Projects\ConsoleApplication5\Debug\ConsoleApplication5.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

解决方案:项目属性 - 配置属性 - C/C++ - 代码生成 - 运行库,根据编译的libcurl版本选择/MT或/MD

重新编译运行成功。

vc2008构建和使用libcurl静态库:http://blog.csdn.net/mos2046/article/details/7697530

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 08-25

Windows下编译libcurl.lib静态库的相关文章

windows 下编译libcurl

因为linux平台采用了libcurl,有一个程序移植到到windows平台,再linux采用libcurl.在windows下准备也采用该库.在网上搜索了几位同行写的,步骤写的都不是太清楚,导致我走了不少弯路. 本文将以详细的步骤,介绍libcurl的编译. 下面是步骤: 1. 下载源代码,直接从github上clone仓库,就可以了. git clone https://github.com/curl/curl.git 2. 选择版本 我采用了版本: 7.56.0 (tag) 3.  生成工

七牛qiniu c/c++ sdk 在windows系统环境下使用vs导入lib静态库的使用教程总结

我相信很多人对于导入lib库都有一定的疑问,我这里给大家示范下,这里我是以新建项目为基础开始搭建. 1,创建vs集成开发环境下的c++工程项目 步骤依次是 2,下载七牛c sdk的静态库文件 http://developer.qiniu.com/code/v6/sdk/cpp.html 下载后文件解压,会看到两个文件夹,一个为动态库的文件夹,一个为静态库的文件夹 但是我在测试中会报一个这样的错误. error LNK1104: 无法打开文件"curllib.lib" 所以你可以在静态库

WIndows下编译libexif-0.6.21,生成VS下可用的dll和lib

1.下载libexif-0.6.21.zip 下载地址是http://sourceforge.net/projects/libexif/files/libexif/0.6.21/ 2.解压libexif-0.6.21.zip 我解压到了d:\opensources\下 3.安装Mingw 下载地址是http://www.mingw.org/ 点击右上角的Download Installer 记得安装Msys 我的安装路径是:C:\MinGW 下面依次有如下文件夹: bin include lib

Linux编译多个不同目录下的文件以及静态库、动态库的使用

先看两篇博文,作为基础知识.如果对C/C++编译链接过程都了解的话,可以跳过不看. http://www.firedragonpzy.com.cn/index.php/archives/2556 http://www.cppblog.com/shifan3/archive/2007/01/05/17325.html 一.  编译不同目录下的多个文件 各个文件的布局如下: head.h文件的代码: [cpp] view plaincopy #ifndef  HEAD_H #define  HEAD

开源库evhtp在windows下编译

工作需要搭建基于C++的http服务,最后选择使用evhtp.在linux下的编译参考readme即可.现在重点来说下windows下的编译过程. 代码git地址:https://github.com/criticalstack/libevhtp 编译准备 Visual Studio 必须  笔者用的是VS2019 Libevent2库   必须  git地址:https://github.com/libevent/libevent,libevent的windows版本编译相对简单) CMake

在Windows下编译OpenSSL(VS2005和VC6)

需要说明的是请一定安装openssl-0.9.8a .  openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装ActivePerl//初始化的时候,需要用到perl解释器2.使用VS2005下的Visual Studio 2005 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)3.解压缩openssl的包,进入openssl的目录4.perl configure VC-WIN32尽量在这

Windows下编译LevelDB

Windows下编译LevelDB flyfish 2015-7-8 LevelDB是开源的存在磁盘上的key-value存储 由google的Jeffrey Dean 和Sanjay Ghemawat编写. 环境 操作系统:windows x64 编译器: VC2010 配置 需要Boost库支持,需要先将Boost库编译为64位版本 1文件->新建->从现有代码文件创建新项目 打开 从现有代码文件创建新项目 向导窗口 2要创建什么类型的项目? 选择Visual C++ 3项目文件位置 选择

Skia简介以及在Windows下编译操作步骤

Skia是一个C++的开源2D向量图形处理函数库(Cairo是一个矢量库),包括字型.坐标转换.位图等等,相当于轻量级的Cairo,目前主要用于Google的Android和Chrome平台,Skia搭配OpenGL/ES与特定的硬件特征,强化显示的效果.另外,Skia是WebKit支持的众多图形平台之一,在WebKit的GraphicsContext.h/.c中有相关实现. Android与Chrome的源代码库中都有一份Skia的复制,因需求不同,做了部分的修改. Skia需要的底层库有:f

Linux 下创建和使用静态库

Linux 下使用 ar 工具(Windows 下vs使用lib.exe,将目标文件压缩到一起,并且对其进行编号和索引,以便于查找和检索),创建步骤如下图所示: Linux 下静态库命名规范, lib[your_library_name].a,其中lib为前缀,中间是静态库名,后缀名是 .a 1. 将源文件编译成目标文件 .o (假设源文件为 Math.cpp)  g++  -c  Math.cpp  执行此命令后,便会生成 Math.o 目标文件 2. 然后用 ar 工具将目标文件打包成 .a