mingw 环境编译 liburl故障一例
环境是 windows 10,已经安装 mingw,并设置好mingw 和 msys的环境变量
C:\Users\cracker>set |grep MinGW
Path=C:\Program Files (x86)\Windows Resource Kits\Tools\;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\MinGW\bin;C:\MinGW\msys\1.0\bin C:\Users\cracker>systeminfo | grep OS
OS 名称: Microsoft Windows 10 专业版
OS 版本: 10.0.14393 暂缺 Build 14393
OS 制造商: Microsoft Corporation
OS 配置: 独立工作站
OS 构件类型: Multiprocessor Free
BIOS 版本: LENOVO H2ET68WW(1.68), 2013/5/17 C:\Users\cracker>
下载curl源代码,执行configure
C:\Users\crackme\Downloads\curl-7.50.3\curl-7.50.3>perl configure
一会儿之后出错了
checking whether time.h and sys/time.h may both be included... (cached) yes
checking for sys/types.h... (cached) yes
checking for sys/time.h... (cached) yes
checking for time.h... (cached) yes
checking for sys/socket.h... (cached) no
checking for struct timeval... yes
checking run-time libs availability... failed
configure: error: one or more libs available at link-time are not available run-time. Libs used at link-time: -lwldap32 -lws2_32
C:\Users\crackme\Downloads\curl-7.50.3\curl-7.50.3>
无数次的 google 和 baidu 都找不出原因。看日志:
configure:27930: checking run-time libs availability
configure:27947: gcc -o conftest.exe -O2 -Wno-system-headers conftest.c -lwldap32 -lws2_32 >&5
conftest.c:92:1: warning: return type defaults to 'int' [-Wimplicit-int] main() ^ configure:27947: $? = 0
configure:27947: ./conftest.exe
- Cannot openconfigure:27947: $? = 1
configure: program exited with status 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "curl"
......
| #define HAVE_STRUCT_TIMEVAL 1
| /* end confdefs.h. */
|
| main()
| {
| return 0;
| }
|
configure:27951: result: failed
configure:27953: error: one or more libs available at link-time are not available run-time. Libs used at link-time: -lwldap32 -lws2_32
可以看出,这些日志的大致意思是:编译了一个 conftest.exe。但执行失败了。所以得出结论"one or more libs available at link-time are not available run-time"。
conftest.exe 的源代码很简单
| main()
| {
| return 0;
| }
|
为什么会执行失败呢?上测试代码。
C:\Users\cracker\Downloads\curl-7.50.3\curl-7.50.3>echo main(){ return 0; } >conftest.c
C:\Users\cracker\Downloads\curl-7.50.3\curl-7.50.3>gcc -o conftest.exe conftest.c
conftest.c:1:1: warning: return type defaults to 'int' [-Wimplicit-int]
main(){ return 0; }
^
C:\Users\cracker\Downloads\curl-7.50.3\curl-7.50.3>conftest.exe
系统无法执行指定的程序。
C:\Users\cracker\Downloads\curl-7.50.3\curl-7.50.3>g++ -o conftest_gpp.exe conftest.c
C:\Users\cracker\Downloads\curl-7.50.3\curl-7.50.3>conftest_gpp.exe
C:\Users\cracker\Downloads\curl-7.50.3\curl-7.50.3>
同样的代码,分别用gcc和 g++编译,都编译成功,但gcc编译的 conftest.exe不能执行,而g++编译的conftest_gpp.exe 没有报错。检查了 gcc的版本什么的都没有问题。后来gcc执行编译时,电脑右下角总会弹出个提示:

想到可能是 windows defender在作怪。测试一下:
C:\Users\cracker\Downloads\curl-7.50.3\curl-7.50.3>copy conftest.exe temp.exe
无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。
已复制 0 个文件。 C:\Users\cracker\Downloads\curl-7.50.3\curl-7.50.3>
确认了猜测。关闭 windows defender ,编译成功。
windows defender 这杀毒水平,我也是醉了。
C:\Users\cracker\Downloads\curl-7.50.3\curl-7.50.3>set OPENSSL_PATH=C:\MinGW\msys\1.0\local\ssl
C:\Users\cracker\Downloads\curl-7.50.3\curl-7.50.3>mingw32-make mingw32-ssl
C:\MinGW\msys\1.0\local\ssl 是 openssl的安装目录。openssl的安装编译比较简单:
下载 openssl并编译
C:\Users\cracker\Downloads\openssl-1.0.2j\openssl-1.0.2j>perl Configure enable-shared mingw
C:\Users\cracker\Downloads\openssl-1.0.2j\openssl-1.0.2j>make
C:\Users\crackme\Downloads\openssl-1.0.2j\openssl-1.0.2j>make install
perl 是 msys自带的。如果 perl命令失败,则是上一步没设置好 环境变量。
enable-shared 是指示 openssl生成动态连接库 dll。这个参数不是必须的。没有该参数则只会生成静态连接库 .a
mingw指示设置编译环境为 mingw。
mingw 环境编译 liburl故障一例的更多相关文章
- Win7 64位 VS2015及MinGW环境编译矢量库agg-2.5和cairo-1.14.6
书接上文,昨天装了MinGW,主要原因之一是要用到MSYS,所以顺手把FFMPEG又编译了一遍. 回到主题,其实我是想编译矢量库,因为最近要学习一些计算几何算法,所以找个方便的2D画图库就很重要. 说 ...
- Win7 VS2015及MinGW环境编译矢量库agg-2.5和cairo-1.14.6
书接上文,昨天装了MinGW,主要原因之一是要用到MSYS,所以顺手把FFMPEG又编译了一遍. 回到主题,其实我是想编译矢量库,因为最近要学习一些计算几何算法,所以找个方便的2D画图库就很重要. 说 ...
- Win7 64位 VS2015及MinGW环境编译FFMPEG-20160326
因为又要弄MinGW了,所以顺便把FFMPEG编译了,文章主要参考这篇,防抽所以复制一遍,顺便加些自己的内容 http://blog.csdn.net/finewind/article/details ...
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Lin ...
- Win7 VS2015及MinGW环境编译FFMPEG-20160326
因为又要弄MinGW了,所以顺便把FFMPEG编译了,文章主要参考这篇,防抽所以复制一遍,顺便加些自己的内容 http://blog.csdn.net/finewind/article/details ...
- MyEclipse无法自动编译项目故障一例
MyEclipse导入项目后发现无法自动编译,classes目录下没有编译的类. 尝试的解决方法: 1.刷新项目,失败: 2.project->clean-,失败: 3.关闭项目再次打开,失败: ...
- Codeblocks + opencv + Cmake + minGW 环境搭建(一劳永逸版)
应工作开发需要,今天搭建一个codeblocks的C++开发环境,需要配置opencv2.4.4的API协同开发. 1.为了避免不必要的配置编译器,下载codeblocks16.1带mingw编译器版 ...
- 在Windows下使用MinGW静态编译Assimp
使用MinGW静态编译Assimp 到了5月份了,没有写一篇日志,于是自己从知识库里面拿出一篇文章充数吧.这次将要解说怎样在Windows下使用MinGW静态编译Assimp. Assimp是眼下比較 ...
- Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作 (转)
大致流程: 1.安装Qt(源码版)以及其他必要的环境 2.编译/安装 3.配置 4.使用 ----------正文分割线---------- 1.安装Qt(源码版) 1.1 下载Qt(两个地址二选一即 ...
随机推荐
- oracle 查看运行中sql
sys用户登录 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的 ...
- [DNX]解决dnu restore时找不到Newtonsoft.Json的问题
在Mac上用最新版的dnx 1.0.0-beta5-11855进行dnu restore,出现下面的错误: System.IO.FileNotFoundException: Could not loa ...
- Qt之Dialog\widget\ mainwindow的区别和布局管理器 & 分裂器的区别
1.Dialog\widget\ mainwindow的区别 注意mainwindow和widget的区别,mainwindow都工具栏和菜单栏 Dialog and mainwinodws 都是继承 ...
- Java-JDK配环境,eclipse工具认识
一.JDK配环境: 1.JDK思维导图 2.测试代码: 需要注意点位类名大小写的区分,符号为英式输入法下的, ; . class Hello{ public static void main(Stri ...
- atitit.基于http json api 接口设计 最佳实践 总结o7
atitit.基于http json api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...
- Leetcode 165 Compare Version Numbers
题意:比较版本号的大小 有点变态,容易犯错 本质是字符串的比较,请注意他的版本号的小数点不知1个,有的会出现01.0.01这样的变态版本号 class Solution { public: int c ...
- javascript设计模式与开发实践阅读笔记(4)——单例模式
定义 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 具体来说,就是保证有些对象有且只有一个,比如线程池.全局缓存.浏览器中的window 对象等.在js中单例模式用途很广,比如登录 ...
- 在Unicode版Inno Setup中使用ISSkin
ISSkin是Code jock 公司出品的Inno Setup 皮肤插件,用于为Inno制作的安装程序提供皮肤功能. 自Delphi发布2009之后,Inno Setup 开始出现支持Unicode ...
- SQL行转列和列转行
行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和 ...
- C# 设置和获取一个字节的某一位的值的方法
自己工作中遇到需要对单字节的高位.低位进行赋值,即一个字节byte,想要给每一位都赋值,这个值是动态来的,是0或是1. 好不容易收集到一些珍贵资料,整理一下: 一.设置 方法code: /// < ...