Electronic Joint Business

Solution for E-Business

MinGW

阅读 Grub 源代码 (一) X86 汇编及 GAS 语法

文章评价:

简介
本文的例子采用 AT&T 汇编语法编写,并用 GNU AS 编译的。该语法的主要优点是它与 GCC 内嵌汇编保持着语法兼容性。不过,这并不是表示 X86 操作符唯一语法。例如,NASM、MASM 就使用了完全不同的语法来表示助记符,操作数和寻址模式及其他高级汇编特性。 AT&T 的语法是类 Unix 系统上的标准,但其他使用 Intel 语法的汇编器,比如 GAS 本身,两种语法都可以接受。

GAS 是 GNU 项目的一部分,它具有可以自由使用、适用于多种操作系统、和 GNC 编译器 (gcc) 和 GNU 链接器 (ld) 等编程工具接口良好等等特点。

如果使用安装了 Linux 操作系统的电脑,通常默认就安装了 GAS。如果使用的是 Windows 操作系统,则可以安装 Cygwin 或者 MinGW 来获得 GAS 和其他编程工具。

GAS 指令一般都采用“ 助记符 源,目的地 ”的格式。例如,下面的 mov 指令:

>>> 阅读全文

 

, , , , , ,

从MinGW交叉编译出MinGW64

MinGW一直没有推出64位的版本,因此在SF.NET上又有一个新的项目叫 MinGW64,虽然大家支持的都是 GCC,但是两个项目是有一些区别的,除了前面提及的32位版和64位版的问题外,主要是二者的运行时不尽相同,MinGW64 重写了自己的 MinGW 运行时,称为 MinGW-W64,和 MinGW 相比,其运行时支持的 Windows API 更多一些。

但是 MinGW64 上发布的二进制包中,缺少一些很有意思的语言工具,比如 ada。而编译ada要求GCC中一定要有 gnat(即 ada 编译器)存在,而目前只有 MinGW 才提供了 ADA 编译器,所以我们必须回到起点,从32位的 MinGW 逐步交叉编译 MinGW64。

这个过程会用到的工具有:MinGW 和 MSYS 的二进制包和以下源代码包,包括:binutils (2.22), GCC (4.7.0),MinGW-W64运行时(2.0.2), gmp (5.0.1), mpfr (3.1.0), MPC (0.9)。 要求 MinGW 中 GCC 工具的版本,最好要编译的源代码一直,避免出现低版本的 GNAT 无法识别高版本的 ADA 语法而报错。

一切就绪之后,可以开始解压源代码包,并将 gmp,mpfr 和 mpc 拷贝到 gcc-4.7.0 的目录中,并去掉名字中的版本号。 我们下来首先会构造出交叉编译的工具来。

创建32位交叉编译环境
1. 创建临时工作目录
我们的32位交叉编译环境将要被发布到 C:\\tools 目录下,打开DOS窗口,创建一个文件夹 tools。之后在 MSYS 安装目录下找到 etc 文件夹里的 fstab 文件,添加一行:

>>> 阅读全文

 

, , , ,

使用MinGW64编译GCC 4.6和4.7

gcc 4.6.0简介
GNU在3月25日正式放出了GCC 4.6.0的Tarball,不过在GNU的站点上也可以下载到GCC 4.7的Snapshot,你可以从GCC SnapShot站点, 下载到最新的版本。GCC 4.7的编译过程和GCC 4.6一致。

GCC 4.6支持以下这样一些新特性。除了支持一些新的鸡肋语言,比如Go,主要更新亮点有:

  • 大大改进了过程间分析和链接时优化。
  • 增加了128位浮点数支持,这个在科学计算领域应该很有用,X86和安腾系的芯片首先得益。
  • 一些详细的细节包括:

  • 增加更强力的编译优化选项-ofast,这个选项除了打开-O3的所有优化外,还开启了所有能开启的优化,以获得更好的性能,如-ffast-mast优化
  • 改进链接时优化(LTO): ◦全局可扩展优化器已经足够稳定。打开LTO后会默认开启此优化。该优化器可以自动分割成几个并行的编译过程,可以用选项-flto=n指定并行编译进程个数。
  • 增加-fstack-usage选项。编译器可以输出程序的栈使用信息
  • 你还可以参考GCC 4.6的release notes,该页面上有更详细的信息。

    准备工作
    为了开始编译GCC,你需要安装一份MinGW64的拷贝和MSYS。我们首先安装MinGW64,将其压缩包解开即可,在本文中MinGW64为C:\MinGW64。

    >>> 阅读全文

     

    , ,

    GTK+ 3.0编程 (一) 编译GTK+3.1.6

    文章评分:

    GTK 最早是作为另一个著名的开放源码项目 —— GNU Image Manipulation Program (GIMP) —— 的副产品而创建的,这也是 GTK 名称的由来,即 GIMP Toolkit。当这个工具包获得了面向对象特性和可扩展性之后,在名称后面加上了一个加号。全世界各地的程序员已经用 GTK+ 编写了成百上千的应用程序,包括 Linux 下两个主要的桌面环境(Xfce 和 GNOME)。

    GTK+ 据说具有简单易用,具有设计良好和可扩展性强等特点(这些特点相对 QT 真的是很值得怀疑),而且 GTK+ 是可移植的。这意味着用户编写出既可以在 Windows 上,又可以在 Linux 或 Unix 上运行的程序。在本文中,我们将利用 MinGW64 在 Windows 平台上编译出最新推出的 GTK+ 3.1.6,并用其开发出漂亮的 GUI 应用。其源代码在Linux 平台表现也是一致的。

    GTK+ 架构
    在编译 GTK+ 庞杂的软件包之前,我们需要对 GTK+ 有所了解, 比如这些软件包是如何组合成 GTK+ ?这些库文件是如何堆叠的?GTK+ 和 Glib,Pango 的关系如何等等诸如此类的问题。图一显示了 GTK+ 的一个整体架构,我们下面对每一个部分稍做解释。

    Glib是一个通用的工具类库,它提供了类型定义、高级的数据结构(比如:linked list,hash tables,binary trees)、线程、宏、警告信息和断言、类型系统和对象系统等等。其中GObject是对象系统的类库,通常会编译成独立的共享库文件,但其源代码随着Glib代码树发布。在 GObject 内部有一个动态的通用类型系统,即 GType,它在非对象的类型比如 opaque pointers, strings, variously sized integers and floating point numbers 之外提供一个单根继承的类结构。

    >>> 阅读全文

     

    , , ,

    在 Eclipse 中集成 MinGW64 开发环境

    文章评价:

    本文主要讨论如何集成 Eclipse 和 MinGW64 来进行 C/C++ 应用程序的开发。由于不同版本 Eclipse CDT 的稳定性表现不一,因此需要你合理选择 Eclipse 的版本,现在已知 Helios (Eclipse 3.6) 的 CDT 在开发中会频繁崩溃,不建议使用。本文选择的是 Eclipse 4.3.1 来讲解,其他版本方法基本相同。

    GCC编译器
    首先要做的是下载一个合适的 MinGW64 编译器。要开发并运行 64 位的 Windows 应用,你可以选择 32 位的 GNU C/C++ 编译器并通过交叉编译来产生 64 位应用, 也可以选择纯 64 位的编译器。在 MinGW64 的官方站点上提供了许多不同的版本,你可以在 EJB.CC 下载到 GCC 4.6.1 for Windows ,或者在SourceForge.net上选择最新的版本。

    同时还需用到 MSYS(在 MinGW 的站点上提供),MSYS 提供一些常见的 Linux 命令工具用于 Windows GCC 的编程开发,目前只有 32 位版本,不过不会对代码生成有任何影响。

    接下里要做的就是为 Eclipse 安装最新的 CDT,目前 Galieo 只支持 CDT 6.0,Helios 则支持 CDT 7.0,而 Indigo 则支持 CDT 8.0,以此类推。如果你下载的 Eclipse 并未集成 CDT,你可以从 “Help” 菜单下选择 “install new software”,之后在 “avaiable software” 中的 “programming languages” 中选择各个 C++ 子项并安装。

    >>> 阅读全文

     

    , , , , ,

    用MinGW64编译及使用Spider Monkey引擎

    文章评价:

    SpiderMonkey 是用 C 语言编写的的 JavaScript 引擎,它支持 JS1.4 和 ECMAScript-262 规范, 可以分析、编译和执行脚本,并根据 JS 数据类型和对象的需要进行内存分配及释放操作。利用该引擎可以让你的应用程序具有解释 JavaScript 脚本的能力,目前已有许多项目都采用了 SpiderMonkey 引擎,比如 MongoDB, K-3D 等等。本文我们会简要介绍 SpiderMonkey 的编译方法,以及如何集成 SpiderMonkey 到您自己的项目中。

    编译 Spider Monkey
    Spider Moneky 依赖于 NSPR 软件包,NSPR 的全称是 Netscape Portable Runtime,它提供线程、线程池、垃圾收集、mutex 和 condition variable 等等诸多特性,并且独立于平台,是相当有用的一套 API。换句话说,NSPR 是屏蔽不同操作系统的差异性的一套API。

    关于 NSPR,另文介绍。

    在 Mozilla 站点上可以下载 NSPR 软件包,最新的版本是4.8.6,将它解压到 MSYS 的 $HOME 目录下。

    >>> 阅读全文

     

    , , , , ,

    用MinGW64编译Readline GetText等类库

    MinGW,即 Minimalist GNU For Windows。它是一些头文件和迁移库的集合,该集合允许人们在不使用其他第三方动态链接库的情况下采用 GCC(GNU Compiler C)产生 Windows32 程序。

    MSYS:Minimal GNU(POSIX)system on Windows,是一个小型的 GNU 环境,提供了类似 Bourne shell 环境下要编译程式的一些工具包括基本的 bash,make 等等,是为方便进行模拟 Linux 下配置编译环境而设计的。 二者配合可以很方便的将 Linux 下的许多优秀软件迁移到 Windows 上来。

    这里介绍一些常见的GNU库的编译方法,为了得到64位的二进制包,必须选用MinGW64,而不是常见的MinGW,所以需要添加–build=x86_64-w64-mingw32,您可以根据自己的实际环境进行修改。我是在YA-MinGW64中有维护一些二进制包,你可以从该站点上下载。

    安装 MinGW64
    MinGW64 不是 MinGW 的子项目,它是一个新的开源项目,我是 MinGW64 的开发者之一,这个项目的目的是把 MinGW 迁移到64位平台上来(MinGW官方不提供64位版本)。你可以到MinGW64站点 上下载 GCC 4.6.3 或者 GCC 4.7.0 的二进制发布,解压到 MinGW64 目录里即可。

    除了 MinGW64 外,我们还需要一个类似 Bash 的开发环境,以方便运行 configure 命令,你可以下载 MinGW 的 MSYS(32位)的可执行安装文件,安装过程中会提示 MinGW的路径,这里只需要选择 MinGW64 的安装目录即可。安装好 MSYS 之后,打开安装目录下的 etc 子目录中的 fstab 文件,添加以下几行:

    >>> 阅读全文

     

    , , , , , , , , , ,