Windows7 64下MinGW64/MSYS环境搭建
原文出处:
CompileGraphics Magick, Boost, Botan and QT with MinGW64 under Windows 7 64
http://www.kineticsystem.org/?q=node/19
译文出处:
http://blog.csdn.net/cheungmine/article/details/8918808
1 安装MSYS
从下面的地址下载并运行:mingw-get-setup.exe
http://sourceforge.net/projects/mingw/files/latest/download?source=files
选择安装msys base和mingw developer toolkit.
安装目录在本文中为C:\DEVPACK\MinGW.
安装完毕之后运行下面的命令行:
C:\DEVPACK\MinGW\msys\1.0\msys.bat
逐条输入下面的语句,执行安装软件包:
|
1
2
3
4
5
|
mingw-getinstallmingw-getinstallmingw-getinstallmingw-getinstallmingw-getinstall |
右键点击文件C:\DEVPACK\MinGW\msys\1.0\msys.bat,在桌面上创建快捷方式, 并在"msys.bat - 快捷方式" 上点击右键, 目标后面添加--rxvt
2 安装rubenvb MinGW-w64
1)从下面的链接进入下载页面:
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/rubenvb/gcc-4.8-release/
下载(为64位Windows编译原生64位):
x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb.7z
2)从下面的链接进入下载页面:
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/rubenvb/gcc-4.8-release/
下载(为32位Windows编译,也可以运行在Win64上):
i686-w64-mingw32-gcc-4.8.0-win64_rubenvb.7z
包的命名规范是:
[i686-w64-mingw32]-[gcc-4.8.0]-[win64]_rubenvb
[目标平台]-[gcc-4.8.0]-[工具链OS]_rubenvb
目标平台指MinGW最终编译好的二进制代码运行的平台,[i686...]表示Win32平台,[x86_64-...]表示Win64平台。工具链OS表示你安装MinGW的计算机OS。
例如,如果想在WinXP32位平台上编译运行于Win7 64位平台的程序或库(dll),需要选择:x86_64-w64-mingw32-gcc-4.8.0-win32_rubenvb.7z。
因为我的机器是64位Win7,因此我选择了上面2个包。解压后得到:
|
1
2
|
C:\DEVPACK\MinGW\mingw32\ C:\DEVPACK\MinGW\mingw64\ |
另外添加3个目录如下,用于存放特定的工具链:
|
1
2
3
|
C:\DEVPACK\MinGW\opt C:\DEVPACK\MinGW\local32 C:\DEVPACK\MinGW\local64 |
修改文件C:\DEVPACK\MinGW\msys\1.0\etc\fstab如下:
|
1
2
3
4
5
6
7
|
#C:\DEVPACK\MinGW\ C:\DEVPACK\MinGW\mingw32\ C:\DEVPACK\MinGW\mingw64\ C:\DEVPACK\MinGW\opt\ C:\DEVPACK\MinGW\local32\ C:\DEVPACK\MinGW\local64 |
重新打开MSYS命令行工具(以后不特别说明,凡是以$开头的都是指msys-bat命令行MSYS,无$开头指windows命令行cmd),输入下面的命令以创建目录:
|
1
2
3
|
mkdirmkdir/local{32,64}/{bin,etc,include,lib,share,dst,src} mkdir/local{32,64}/lib/pkgconfig |
3 安装CMake
在下面的地址下载cmake-2.8.10.2-win32-x86.zip,解压到/opt下面。
http://www.cmake.org/cmake/resources/software.html
解压后的目录结构如下:
|
1
2
3
4
|
/opt/bin /opt/doc /opt/man /opt/share |
4 配置32位和64位编译环境
打开MSYS命令行工具,运行下面的命令创建目录:
|
1
|
mkdir |
1)为了能分开编译32和64位的程序,为32位编译创建配置文件:/local32/etc/profile.local
$ cat >/local32/etc/profile.local << "EOF"
#==================Begin of /local32/etc/profile.local ====================
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
aliasalias exportexportexportexportexportexportexport exportexportexportexport # APPLICATION_ARRAY=( "LIBICONV_PREFIX:$DST_DIR/libiconv" "ZLIB_PREFIX:$DST_DIR/zlib" "BZIP2_PREFIX:$DST_DIR/bzip2" "LIBTOOL_PREFIX:$DST_DIR/libtool" "LIBXML2_PREFIX:$DST_DIR/libxml2" "LIBPNG_PREFIX:$DST_DIR/libpng" "LIBJPEG_PREFIX:$DST_DIR/libjpeg" "LIBTIFF_PREFIX:$DST_DIR/libtiff" "FREETYPE2_PREFIX:$DST_DIR/freetype2" "LCMS2_PREFIX:$DST_DIR/lcms2" "FFTW_PREFIX:$DST_DIR/fftw" "BOTAN_PREFIX:$DST_DIR/botan" "QT_PREFIX:$DST_DIR/qt" "OPENCV_PREFIX:$DST_DIR/opencv" "LIBUSBX_PREFIX:$DST_DIR/libusbx" "LIBFFI_PREFIX:$DST_DIR/libffi" "PKGCONFIG_PREFIX:$DST_DIR/pkg-config" "GETTEXT_PREFIX:$DST_DIR/gettext" "GLIB_PREFIX:$DST_DIR/glib" "GMQ8_PREFIX:$DST_DIR/gm-q8" "GMQ16_PREFIX:$DST_DIR/gm-q16" "IMQ8_PREFIX:$DST_DIR/im-q8" "IMQ16_PREFIX:$DST_DIR/im-q16" "BOOST_PREFIX:$DST_DIR/boost" "LIBUSBX_PREFIX:$DST_DIR/libusbx" "GLIB_PREFIX:$DST_DIR/glib" "YAFARAY_PREFIX:$DST_DIR/yafaray" "SQLITE3_PREFIX:$DST_DIR/sqlite3" "LIBTIFF_PREFIX:$DST_DIR/libtiff" ) for KEY=${app%%:*} VALUE=${app##*:} export export export export export export export done exportexport |
#==================End of /local32/etc/profile.local =====================
EOF
2)为64位编译创建配置文件:/local64/etc/profile.local
$ cat >/local64/etc/profile.local << "EOF"
#==================Begin of /local64/etc/profile.local ====================
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
aliasalias exportexportexportexportexportexportexport exportexportexportexport # APPLICATION_ARRAY=( "LIBICONV_PREFIX:$DST_DIR/libiconv" "ZLIB_PREFIX:$DST_DIR/zlib" "BZIP2_PREFIX:$DST_DIR/bzip2" "LIBTOOL_PREFIX:$DST_DIR/libtool" "LIBXML2_PREFIX:$DST_DIR/libxml2" "LIBPNG_PREFIX:$DST_DIR/libpng" "LIBJPEG_PREFIX:$DST_DIR/libjpeg" "LIBTIFF_PREFIX:$DST_DIR/libtiff" "FREETYPE2_PREFIX:$DST_DIR/freetype2" "LCMS2_PREFIX:$DST_DIR/lcms2" "FFTW_PREFIX:$DST_DIR/fftw" "BOTAN_PREFIX:$DST_DIR/botan" "QT_PREFIX:$DST_DIR/qt" "OPENCV_PREFIX:$DST_DIR/opencv" "LIBUSBX_PREFIX:$DST_DIR/libusbx" "LIBFFI_PREFIX:$DST_DIR/libffi" "PKGCONFIG_PREFIX:$DST_DIR/pkg-config" "GETTEXT_PREFIX:$DST_DIR/gettext" "GLIB_PREFIX:$DST_DIR/glib" "GMQ8_PREFIX:$DST_DIR/gm-q8" "GMQ16_PREFIX:$DST_DIR/gm-q16" "IMQ8_PREFIX:$DST_DIR/im-q8" "IMQ16_PREFIX:$DST_DIR/im-q16" "BOOST_PREFIX:$DST_DIR/boost" "LIBUSBX_PREFIX:$DST_DIR/libusbx" "GLIB_PREFIX:$DST_DIR/glib" "YAFARAY_PREFIX:$DST_DIR/yafaray" "SQLITE3_PREFIX:$DST_DIR/sqlite3" "LIBTIFF_PREFIX:$DST_DIR/libtiff" ) for KEY=${app%%:*} VALUE=${app##*:} export export export export export export export done exportexport |
#==================End of /local64/etc/profile.local ======================
EOF
3)默认采用64位编译环境,因此更改脚本:
$ cat >> /etc/profile << "EOF"
|
1
2
3
|
if sourcefi |
EOF
4)在MYSYS命令行中使用下面的语句可以在32/64位编译环境之间切换:
|
1
2
|
sourcesource |
5 编译安装x64库
5.1 Pkg-config Lite
pkg-config程序就是向用户向程序提供相应库的路径、版本号等信息的程序。譬如说我们运行以下命令pkg-config 查看gcc的CFLAGS参数:
$pkg-config --libs --cflags opencv
会显示如下信息:
-I/usr/include/opencv -lcxcore -lcv -lhighgui-lcvaux
这就是用gcc编译连接时CFLAGS的参数。因此当我们需要编译连接某个库时,我们只需把上面那行加入gcc 的参数里面即可。这也是configure的作用,它会检查你需要的包,产生相应的信息。
下载:pkg-config-lite-0.27.1-1.tar.gz
地址:http://sourceforge.net/projects/pkgconfiglite/files/0.27.1-1/
解压到$SRC_DIR:/local64/src
|
1
2
3
4
5
6
|
$$$$$$ |
按照上面的过程,很顺利我们编译好了64位版本的程序pkg-config。下面继续。
5.2 编译zlib
http://zlib.net
下载:zlib-1.2.8.tar.gz 到$SRC_DIR
|
1
2
3
4
5
6
7
8
|
$$$$$$$$ |
5.3 编译libiconv
这是个字符编码转换库和工具。比如GBK->UTF-8。
下载libiconv-1.14.tar.gz到$SRC_DIR:
地址:
http://ftp.gnu.org/pub/gnu/libiconv/
运行下面的命令,解压源码包,编译和安装:
|
1
2
3
4
5
|
$$$$$ |
同样的办法可以编译win32版本的libiconv:
|
1
2
3
4
5
6
|
$$$$$$ |
5.4 编译LibTIFF
下载:tiff-4.0.3.tar.gz
地址:ftp://ftp.remotesensing.org/pub/libtiff/
解压到:$SRC_DIR (32位是/local32/src, 64位是/local64/src)
|
1
2
3
4
5
|
$$$$$ |
5.5 编译Sqlite3
下载:sqlite-autoconf-3071602.tar.gz
地址:http://sqlite.org/2013/sqlite-autoconf-3071602.tar.gz
运行:
|
1
2
3
4
|
$$$$ |
总结一下,编译和安装 YourLib 步骤是:
3-1)下载库源码包 YourLib.tar.gz 到 $SRC_DIR
3-2)在/local??/etc/profile.local文件中添加我们要编译的库配置,例如:
|
1
2
3
|
...... "SQLITE3_PREFIX:$DST_DIR/sqlite3" "YourLib_PREFIX:$DST_DIR/yourlib" |
3-3)运行解压和编译命令:
|
1
2
3
4
|
$$$$ |
然后就可以把YourLib.dll拷贝到Win32/64系统中使用了。仿照此方法,可以编译其他库。
6 使用Libiconv的64位版本
使用MSVS2010创建win32控制台空项目,添加下面的文件main.c。然后更改项目平台为:x64。
项目属性里面,链接器->高级里面选择:MachineX64 (/MACHINE:X64)。常规->字符集->未设置。经过这样的配置,就可以编译32 / 64位windows程序了。main.c的全部代码如下,可以很好地编译出32位和64位版本:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
/* * * * */ #include#include#include#include #include /*#include /*#include typedef
typedeftypedef int{ size_t iconv_t char size_t HMODULE def_libiconv_open def_libiconv_close def_libiconv in strcpy(in, inbuf inlen out *out outbuf outlen if printf("build hDll
} printf("build hDll
} if printf("DLL exit(0); } __iconv_open if printf("libiconv_open exit(0); } __iconv if printf("libiconv exit(0); } __iconv_close if printf("libiconv_close exit(0); } cd cd2 ret printf("GBK(%s) /* in inlen /* *inbuf out outlen ret printf("UTF-8(%s) __iconv_close(cd); __iconv_close(cd2); free(inbuf); free(outbuf); FreeLibrary(hDll); return} |
7 总结
MinGW作为组织开发、持续集成大型Windows项目,充分利用开源软件,的一款极为优秀的交叉编译环境,提供了我们在不同的平台上编译 Windows程序的能力。举例子来说:
1)x86_64-w64-mingw32-gcc-4.8.0-cygwin_rubenvb.tar.xz
这个包在Cygwin环境下使用MinGW编译出原生的64位Windows二进制APP(静态库,动态库和可执行程序)。
2)x86_64-w64-mingw32-gcc-4.8.0-linux64_rubenvb.tar.xz
这个包在Linux amd64环境下使用MinGW编译出原生的64位Windows二进制APP。
3)i686-w64-mingw32-gcc-4.8.0-win64_rubenvb.7z
这个包在Window x64环境下使用MinGW编译出原生的32位Windows二进制APP。
Windows7 64下MinGW64/MSYS环境搭建的更多相关文章
- Linux(64) 下 Tomcat + java 环境搭建
查看 linux 系统位数 getconf LONG_BIT java JDK下载地址: http://download.oracle.com/otn-pub/java/jdk/8u181-b13/ ...
- Windows7 64下搭建Caffe+python接口环境
参考链接: http://www.cnblogs.com/yixuan-xu/p/5858595.html http://www.cnblogs.com/zf-blog/p/6139044.html ...
- win7下android开发环境搭建(win7 64位)
win7下android开发环境搭建(win7 64位) 一.安装 JDK 下载JDK最新版本,下载地址如下: http://www.oracle.com/technetwork/java/jav ...
- CentOS下Web服务器环境搭建LNMP一键安装包
CentOS下Web服务器环境搭建LNMP一键安装包 时间:2014-09-04 00:50来源:osyunwei.com 作者:osyunwei.com 举报 点击:3797次 最新版本:lnmp- ...
- Android下NDK开发环境搭建
Android下NDK开发环境搭建 1. AndroidNDK安装与配置 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...
- Android下OpenCV的环境搭建
目录(?)[-] 前言 系统环境 相关工具 Android ADT环境搭建 Android SDK环境变量的配置 Android NDK的安装与配置 OpenCV for Android 环境搭建 基 ...
- ubuntu下mysql的环境搭建及使用
ubuntu下mysql的环境搭建及使用 环境安装 使用如下命令分别安装服务端程序,客户端程序,及客户端依赖库 sudo apt-get install mysql-server sudo apt-g ...
- 【转】Windows环境下Android NDK环境搭建
原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员 ...
- Windows环境下Android NDK环境搭建
前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设 ...
随机推荐
- Struts1运行原理以及整合步骤
Struts1 struts1运行步骤 1.项目初始化:项目启动时加载web.xml,struts1的总控制器ActionServlet是一个Servlet,它在web.xml中是配置成自动启动的S ...
- 修改虚机IP
同网段的话,直接修改,不同网段的话,使用以下方法: 步骤一:nova list --all-tenant 找到相应虚拟机+--------------------------------------+ ...
- mysql学习笔记5
phpmyadmin中向数据表中插入新数据 INSERT INTO tb_admin(`table_id`, `table_name`, `table_des`, `table_time`) VAL ...
- bzoj3208:花神的秒题计划I
思路:因为Q.S.B操作总和不超过100,因此怎么暴力怎么写....当然记忆化搜索还是要的 #include<cstdio> #include<iostream> #inclu ...
- [Effective Java读书笔记] 第二章 创建和销毁对象(1~7)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537576.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- Java Web开发中的名词解释
1.JVM Java虚拟机,class文件的运行时环境,就好比软件运行在操作系统一样,java要运行在JVM中才行,这也是Java之所以支持扩平台的基础. 2.Servlet/JSP 是满足一定接口需 ...
- MVC文件上传-使用jQuery.FileUpload和Backload组件实现文件上传
本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: 处理文件上传的服务端组件Backload 用于处理文件上传的服务端组件 ...
- div+css实现的左右两个等高div
工作当中我们经常会有这样的需求,尤其是在一些内容页面或者网站后台管理页面:左边的div的高度会随着右边的div的内容的增加儿增加,右边div的高度也会随着左边div的内容的增加而增加,也就是左右两侧两 ...
- struts2 修改action的后缀
struts2 修改action的后缀 struts2 的默认后缀是 .action 虽然很直观,但是很烦琐.很多人喜欢将请求的后缀改为 .do 在struts2中修改action后缀有两种比较简单的 ...
- 001.XE3添加TPerlRegEx
TPerlRegEx 官方下载地址:http://www.regular-expressions.info/download/TPerlRegEx.zip 下载解压,打开pcre.pas文件可看到,直 ...