Electronic Joint Business

Solution for E-Business

boost

C++ 11 中的多线程

文章评价:

第一个 C++ 标准发布至今已经过去十三年了,随着新的 C++11(或称 C++0X)标准的推出,C++ 标准委员会所做出的显著改变之一就是支持多线程编程。这是首次在 C++ 语言中为并行编程提供支持,而且与平台无关。

在 C++11 标准之前,编写多线程应用需要依赖于特定的平台扩展,如 Intel TBB、OpenMP、Pthreads 等等。现在有了 C++11 的标准线程库就方便了应用移植(例如 Windows 上的 C++11 多线程应用将很容易移植到 Linux 平台),另外对于熟知 Boost 线程库的用户来说,由于 C++11 标准库中许多命名与结构都和 Boost 相同,上手非常容易。1

C++11 标准库中的类可用于线程操作与同步、公用保护数据及低层次的原子操作。

C++11 标准中涉及多线程编程的主要有四个头文件,分别是:<atomic> ,<thread>,<mutex>,<condition_variable>和<future>:

>>> 阅读全文

 

, , ,

用VC++ 10.0 编译Boost类库

为什么需要 Boost 类库?
原因是 C++ 提供的标准类库功能十分有限,功能大概只相当于 Java 里的 io 和 util 两个包。对于开发现代的应用程序,一个没有提供正则表达式,XML 等等类库的语言是不可想象的。Boost 就是鉴于 C++ 类库功能有限,而提供的一套免费的 C++ 函数库 ,吸收了广大高质量的 C++ 函数库,提供更强大的功能,以方便写出写出更高质量的 C++ 程序,加快程序的开发周期。

对于大部分 Boost 应用来说,它是不用编译的,直接包含头文件就可使用,如:

any
array
asio
conversion
crc
bind/mem_fn
enable_if
function
lambda
mpl
smart_pt

只有少部分需要编译成库文件,需要编译的库如下:

date_time
filesystem
function_types
graph
iostreams
math
mpi
program_options
python
regex
serialization
signals
system
test
thread
wave

要完全编译 Boost 库需要先准备一些第三方库,这里在 C: 盘建立了一个 USR 目录,在下面建立三个子目录 bin,include 和 lib,我们需要将 C:\usr\bin 加入到路径中。编译 Boost 需要三个类库,如下:

  • 1. Regex 所需 Unicode 支持类库 — ICU, 这里选用版本是4.4.6.
    编译 ICU 较为简单,解开 ICU 包之后,在其目录下可以找到一个叫”allinone”的目录,用 Visual studio 2010 打开里面的allinone.sln,分别用debug和release编译,编译之后,将 include 目录和 release 目录下的库文件拷贝出来,dll 拷贝到 C:\usr\bin, 头文件拷贝到 C:\USR\include,库文件则放到 C:\USR\lib.
  • 2. Graph 所需的 Xml 处理类库 — Expat, 最新的版本是2.0.1。expat 提供了vc 6.0的项目文件:expat.dsw,用 Visual studio 2010 打开它,并转化成 2010 的项目文件即可编译。如果想要64位的库文件,请注意在配置管理中,把 platform 改成 x64。
  • 3. 编译 Boost.MPI 所需 MPI 类库 — Boost 的官方站点说需要 MPICH 或 OpenMPI 之类的支持,但是在 Windows 编译环境中总是会提示需要 MPIC++,其实你需要的是Microsoft Cluster Pack SDK,下载并默认安装在 c:\Program Files\Microsoft Compute Cluster Pack 下。当然你也可以用 Microsoft HPC Pack 2008 SDK,效果是一样的。

不过,如果下载的是 Microsoft HPC Pack 2008 SDK,或者 Microsoft Compute ClusterPack 不是装到默认的路径下,那 bjam 就会提示找不到 mpic++ 的路径,这时候需要修改一下 mpi.jam(在tools\build\v2\tools),用 notepad 打开它,找到 “local cluster_pack_path_native” 这行,改成:

>>> 阅读全文

 

, , , , , , ,

用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 文件,添加以下几行:

>>> 阅读全文

 

, , , , , , , , , ,