在cygwin下编译boost库

摘要

如何在cygwin下正确编译Boost。cygwin并未提供epoll, kqueue等框架的模拟,在cygwin下使用Boost.Asio应该使用Windows提供的IOCP API。在Boost.Filesystem中,Boost将cygwin视为Windows平台,所以它使用Windows API而非Posix API来操作文件,这导致无法访问到cygwin模拟的一些文件路径。本文将简单描述这些问题的解决方法。

前言部分

如果你想在Vistual Studio下使用boost的话大可不必如此麻烦。请自行搜索其他教程。
要在cygwin下编译,请自行安装cygwin环境,gcc,g++

正文部分

解压源码

tar -xvf boost_1_63_0.tar.bz2
cd boost_1_63_0/

配置项目

./bootstrap.sh

编译选项说明

  • 添加缺少的定义
    由于cygwin没有提供epoll函数,要使用Boost.Asio的话只能使用Windows IOCP的API。需要定义__USE_W32_SOCKETS宏。
    其实Boost.Asio是一个header only的库。这些定义不用在编译boost的时候添加,但为了保险起见,我们还是将它加入到编译参数里。

  • 在Boost中使用Posix API还是Windows API
    从某种角度而言,cygwin可以视为一个特殊的操作系统。他在Windows API的基础上封装了一层Posix API。
    大多数情况下,使用cygwin时可以忽略你在Windows的环境下工作。
    但要使用cygwin的模拟,则必须使用cygwin提供的Posix API。比如你要访问cygwin环境下模拟的/usr, /tmp等目录,若使用Windows API就无法访问到。

    The library’s implementation code treats Cygwin as a Windows platform,
    and thus uses the Windows API and uses Windows path syntax as the
    native path syntax.

    以上是Boost原文中的话。意思是boost将cygwin视为Windows平台,使用Windows API。只支持Windows原生路径。
    这意味着Boost.Filesystem将绕过cygwin的模拟,直接使用Windows API,那么你的应用使用Boost.Filesystem时,将无法使用到cygwin对路径的模拟,也无法访问到。/dev, /pro, /tmp, /usr, /home等Posix风格的路径,这似乎与cygwin的初衷相悖。这一点在boost社区中也有所争议。
    如果你需要选择Posix API,那么需要对源码进行稍作修改

    将文件 ${boost_root}/boost/system/api_config.hpp中

    
    # if defined(_WIN32) || defined(__CYGWIN__) // Windows default, including MinGW and Cygwin
    

    修改为

    
    # if defined(_WIN32) // Windows default, including MinGW
    

    (警告:我并不确定这样修改会不会带来其他隐患,请酌情使用。如果你有更好的方法,希望也能分享出来)

  • 增加编译选项 -fpermissive
    编译过程中,编译器可能由于检查严格而大量报错。导致编译失败,建议一定加这一个选项

3. 开始编译

./b2 cxxflags='-std=gnu++11 -D__USE_W32_SOCKETS -D"__MSABI_LONG(x)=(x)" -fpermissive'

4. 安装

./b2 install
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows下使用Cygwin编译Perl源码可以按照以下步骤进行: 1. 下载和安装Cygwin:首先,你需要下载并安装Cygwin。你可以从Cygwin官方网站(https://www.cygwin.com/)下载安装程序。在安装过程中,选择默认选项即可。 2. 启动Cygwin终端:安装完成后,打开Cygwin终端。你可以在开始菜单中找到Cygwin并点击打开。 3. 安装构建工具和依赖项:在Cygwin终端中运行以下命令来安装构建工具和Perl的依赖项: ``` apt-cyg install make gcc apt-cyg install libiconv-devel libintl-devel libncurses-devel ``` 4. 下载Perl源码:你可以从Perl官方网站(https://www.perl.org/)下载最新的Perl源码压缩包。 5. 解压源码:将下载的Perl源码压缩包解压到一个目录中,比如 `~/perl-source`。 6. 进入源码目录:使用Cygwin终端进入源码目录,比如 `cd ~/perl-source`。 7. 配置构建环境:运行以下命令来配置构建环境: ``` sh Configure -de ``` 这个命令将会配置Perl的构建环境,并使用默认选项。 8. 构建Perl:运行以下命令来开始构建Perl: ``` make ``` 这个命令将会开始编译和链接Perl源码。这个过程可能会需要一些时间。 9. 安装Perl:编译完成后,运行以下命令来安装Perl: ``` make install ``` 这个命令将会将编译好的Perl程序和相关文件复制到系统目录中,使其可以在任何地方使用。 完成以上步骤后,你就成功在Windows下使用Cygwin编译了Perl源码。你可以在Cygwin终端中运行 `perl -v` 命令来验证安装是否成功,并显示Perl的版本信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值