【问题标题】:Using Boost with Cygwin on Windows在 Windows 上使用 Boost 和 Cygwin
【发布时间】:2009-02-26 10:23:54
【问题描述】:

对于比我更高级的用户来说,这应该是一个简单的问题。 :-) 如何在 windows 上使用带有 cygwin 的 boost 库?

我正在使用 cygwin 在 winxp 机器上使用 g++ 进行编程。 我需要修改二阶贝塞尔函数,所以我下载了最新版本的boost库并安装在 'c:\cygwin\lib\boost_1_ 38_0\' 文件夹。

我正在尝试从他们网站的“入门”部分运行“example.cpp”程序: http://www.boost.org/doc/libs/1_35_0/more/getting_started/unix-variants.html

我正在使用简单的 Bash shell 命令行从创建示例文件的目录编译:'g++ -Wall example.cpp'

我不断收到消息: "boost/lambda/lambda.hpp: 没有这样的文件或目录"

我在命令行中尝试了所有可能的 -L、-l、-I 选项组合以包含目录,但无济于事。还尝试在我的 Windows 系统的 PATH 行中添加文件夹。

如何链接到 /boost 目录和所有子目录?头文件“lambda.hpp”正在调用子目录中的其他头文件。

【问题讨论】:

  • 忘记包含程序:#include #include #include #include int main() { using namespace boost::拉姆达; typedef std::istream_iterator in; std::for_each( in(std::cin), in(), std::cout
  • 最新版入门指南的链接是:boost.org/doc/libs/release/more/getting_started/…你链接到1.35。

标签: windows boost cygwin


【解决方案1】:

您可能还不太熟悉 C++?您似乎混淆了术语。

C++ 程序的构建分为两个步骤:编译和链接。在第一步中,每个源文件(通常称为 .cpp)都是单独处理的。每个 .cpp 文件通常使用多个头文件,因此编译器首先插入这些头文件 - 从字面上看。这就是为什么它被称为#include。

在第二步中,链接器将所有已编译的 .cpp 文件放在一起并构建您的最终程序。其中一些已编译的 .cpp 可能之前已捆绑在一起,其中捆绑称为库。

Boost 是头文件和 .cpp 文件的集合。因此,编译器和链接器都可能需要查找 Boost 目录。从您的错误消息中,很明显编译器步骤是问题所在。链接器不再需要标头。

编译器将看到#include <boost/lambda/lambda.hpp> 指令。这意味着它需要知道第一级boost 目录的位置。我猜此时路径将是/lib/boost_ 1_ 38_0/include(总是有find / -name lambda.hppshotgun 方法)

【讨论】:

  • +1 表示非常有耐心为外行用简短的语言解释基本概念 - 谢谢。
  • @Ben 基本概念与专家概念的问题:每个人都可以解释基本概念,但没有人会......同时,专家概念:每个人都试图解释这些,但没有人可以。 :)
  • @bordeo - 你中招了!天才:) 我可能会偷那个。除此之外,没有人愿意通过解释一个简单的概念来显得愚蠢!
【解决方案2】:

如果您不完全喜欢 cygwin,您应该查看 http://nuwen.net/mingw.html,它为您提供了完整的 MinGW C++ 安装以及为您设置的所有库(例如 Boost)。

编辑:我应该明确指出,除了 Cygwin 之外,您还可以使用这个 MinGW 安装,而不是作为替代品。只需确保 MinGW bin 目录出现在您的 PATH 中 Cygwin 之前。

【讨论】:

    【解决方案3】:

    我认为您需要-I /lib/boost_1_38_0 - 尽管这是一个非常不寻常的地方。你必须让我们知道你是如何安装它的,你是把它解压到你说的位置,还是你运行了makefile?我假设由于您提供了 Windows 路径,因此您没有在 cygwin 中安装它——您可能应该这样做。 unix 入门指南中的说明应该会有所帮助 - 尽管不要下载预构建的 bjam - 它需要使用 cygwin 构建。

    但是,如果您对 cygwin(或一般的 unix)不是很熟悉,我想您可能会发现使用原生 windows 工具更容易 - 如 Neil Butterworth's answer

    【讨论】:

      【解决方案4】:

      感谢大家提供的信息,这是对 cygwin 使用库的一个很好的介绍。 丹尼尔是对的。虽然任何变化都会产生错误,但以下行(使用 caps i)可以解决问题:

      g++ -Wall -I /cygdrive/c/cygwin/lib/boost_1_38_0/example.cpp -o 例子

      我也会在接下来的几天里检查 MinGW。

      附言我只是在该文件夹中下载并解压缩了 boost,但由于我只使用头文件,我可能不需要用 cygwin 编译。 [cygwin自带的boost版本是1.33,好像没有贝塞尔函数。]

      【讨论】:

        【解决方案5】:

        这是在 win7 cygwin64 g++ 5.4 和 boost-1.64.7z 上的 2017-7。谷歌没有显示任何有用的结果来开始在 windows 上提升(提升过时了吗?)。

        通过实验,我成功编译并运行了一个boost graph示例程序,如下:

          :: g++ 5.4 in c:\cygwin64
          :: 7z extract boost download in c:\tools\boost\boost164
          > set BOOST_ROOT=c:\tools\boost\boost164
          > setx BOOST_ROOT  c:\tools\boost\boost164 -m
          > cd %BOOST_ROOT%
          > bootstrap.sh gcc  (the bat files doesn't work)
          > b2.exe
             ...failed updating 58 targets...
            ...skipped 18 targets...
        
            ...updated 1123 targets... 
        
          :: Lots of example here (not ranked highly by google)
          > mklink /D eg %BOOST_ROOT%/libs/graph/example
        
          :: Compiled and run [maxflow code using boost library][1] 
          :: http://vision.csd.uwo.ca/code
          > unzip ; vi Makefile
             CPPFLAGS = -I %BOOST_ROOT%/ 
             LDFLAGS = -L%BOOST_ROOT%/stage/lib 
          > make
          > set PATH=%PATH%;%BOOST_ROOT%/stage/lib
          > maxflow.exe 
            Flow = 6
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-14
          • 2011-09-29
          • 2019-04-21
          • 2012-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-15
          相关资源
          最近更新 更多