Posted on 03-09-2009
Filed Under (技术) by waterlin

Boost 被人们誉为 C++ 的准标准库,尝试着为 C++ 提供一个可跨平台使用的、大而全的库。作为一个软件工程师,一直没有机会对 Boost 进行了解与学习,现在正是迎头赶上的时候了!

今天在 Cygwin 下试着编译与安装了 Boost 库(boost_1_40_0版本),非常的简单与方便,大体步骤如下:

1) 下载源代码,解压到任何你想要的地方,我是放在 ~/source_code 目录下,解压后所有 Boost 的文件都在文件夹 boost_1_40_0 里面。

2) 编辑一段最简单的、只需要用到头文件的例子代码。在目录 ~/source_code/boost_1_40_0 下新建一个名叫 example.cpp 的文件,复制下面的代码:

#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
    using namespace boost::lambda;
    typedef std::istream_iterator<int> in;
    std::for_each(
    in(std::cin), in(), std::cout << (_1 * 3) << " " );
}

从命令行编译:

$ g++ -I /home/water/source_code/boost_1_40_0/ example.cpp -o example

上面 -I 后的参数,请根据 Boost 解压后所在的目录填写。编译成功后,运行 ./example,试着输入几个数字看看。

这里补充说明一下有关 C++ 头文件包含问题:如果在上面的命令中,你不想使用 -I 选项,可以把 Boost 的头文件放到 Cygwin 的 #include 目录里去,一般来讲,是 /usr/local/include 或是 /usr/include 目录。你可以把 Boost 源码包里的 Boost 文件夹,一股脑地拷贝到 /usr/local/include 目录下(当然,不支持手动这样做)。

如果你用了下面的命令:

$ g++ example.cpp -o example

而又没有按上面说的把 Boost 的头文件复制到 #include 目录,则会提示类似下面的错误:

$ g++ example.cpp -0 exmaple
g++: exmaple: No such file or directory
g++: unrecognized option `-0′
example.cpp:1:35: boost/lambda/lambda.hpp: No such file or directory
example.cpp: In function `int main()’:
example.cpp:8: error: `boost’ has not been declared
example.cpp:8: error: expected namespace-name before ‘;’ token
example.cpp:8: error: `<type error>’ is not a namespace
example.cpp:12: error: `_1′ undeclared (first use this function)
example.cpp:12: error: (Each undeclared identifier is reported only once for each function it appears in.)

3) 编译与安装 Boost 库的最简单方法

先生成命令行工具 bjam,它是专门负责编译、安装 Boost 库的工具。可以先查看一下相关帮助信息:

$ cd path/to/boost_1_40_0
$ ./bootstrap.sh –help

执行下面的命令就可以生成 bjam:

$ ./bootstrap.sh –prefix=path/to/installation/prefix

最后再利用 bjam 自动编译库文件:

$ ./bjam install

Boost 的编译与安装时间比较长,编译完成后,默认配置下头文件会安装到 /usr/local/include/boost 目录下,而生成的库文件会放到 /usr/local/lib 目录下。更详细的安装可以看看官方文档

4) 以后写完 Boost 代码,就可以直接编译代码了。现在可以试着不指定 Boost 头文件的路径,再编译一把上面的 example.cpp 的例子:

$ g++ example.cpp -o example

现在 g++ 就能自动找到相关的头文件。

如果是 Linux 的话,编译与安装 Boost 的步骤应该大体上差不多;推荐使用各 Linux 发行版编译好的二进制版本,直接下载安装更省事。

(1) Comment    Read More   
Posted on 19-06-2009
Filed Under (技术) by waterlin

最近我在Cygwin中碰到要操作中文字符的问题,显示Windows的中文目录或文件名的时候,看到所有中文文件都变成了”?????”。并且Cygwin并没有办法输入中文作为命令参数,比如新建一个中文名的文件。上网搜了一下,找到了一个解决办法。

配置步骤:

1.在用户home目录里的.bash_profile文件末尾添加如下代码

export LC_ALL=en_US.UTF-16
export LC_CTYPE=en_US.UTF-16
export LANG=en_US.UTF-16
export XMODIFIERS=@im=Chinput3
stty cs8 -istrip
stty pass8
export LESSCHARSET=latin1

2.解决中文输入的问题

Cygwin里默认不会显示你输入的中文,而是显示一大堆的编码。同样是用户的home目录,去掉.inputrc文件中以下代码的注释(前面的#号):

set meta-flag on
set convert-meta off
set input-meta on
set output-meta on

如果你没有.inputrc文件,就创建一个,把上面的代码扔进去。

3. 还是home目录,在.bashrc文件中添加代码:

alias ls=’ls –color –show-control-chars’

4.重启Cygwin。

配置完成了,支持中文并消除了所有的乱码。

(0) Comments    Read More   
Posted on 16-07-2008
Filed Under (技术) by waterlin

今天在Cygwin里写Perl脚本的时候,发现如果Windows的文件路径里有空格的话,Perl或是Cygwin都不能正确识别。

例如有

F:\TestTools\tasks\Unknown messages\MSisa_104756\msisa.unknown.20080321.unx

这样一个文件,在Cygwin下就不能用Perl的Open命令打开文件并读取内容。

如果把其中的Unknown messages换成UnknownMessages,则可以了。

PS:还有一点要注意的就是,在Cygwin里,你直接输入Windows风格的路径,Cygwin会自动帮你识别并转化。你不用手动把Windows风格路径里的“\”转化为Unix风格的“/”。

(0) Comments    Read More   
Posted on 08-05-2008
Filed Under (技术) by waterlin

以安装YAML-Tiny-1.31为例,说明在Cygwin中安装CPAN模块的方法。整个过程,和在Unix/Linux下安装CPAN模块的方法基本一样,不过你事先得在Cygwin中配置好CPAN。

1) 把YAML-Tiny从CPAN上下载下来。

2) 解压这个文件:
tar -xof yourmodule.tar

3) 编译这个模块:

      perl Makefile.PL
     make
     make test

或者可以用这个命令来配置安装目录:
     perl Makefile.PL PREFIX=/my/perl_directory
如果你用了这个选项,你在用YAML::Tiny这个模块的时候,必须在程序的前面加上这么一行:
      use lib "/my/perl_directory"

4) 安装
进入你解压文件的那个目录,用这个命令进行安装:
      make install

到这里,整个安装过程结束。更多的详细安装过程可以参考perlmodinstall
(0) Comments    Read More   
Posted on 08-05-2008
Filed Under (技术) by waterlin

如果你在Cygwin中安装了perl,就可以在Cygwin中设置CPAN了。

$ perl -MCPAN -eshell

中文的有关CPAN的使用介绍得好像比较少,不过这有一篇perlmodinstall不错,大家可以参考一下。

(0) Comments    Read More