在Windows上使用Boost和Cygwin

在Windows上使用Boost和Cygwin,windows,boost,cygwin,Windows,Boost,Cygwin,对于比我更高级的用户来说,这应该是一个简单的问题。:-) 如何在windows上使用带有cygwin的boost库 我正在winxp机器上使用cygwin使用g++编程。 我需要修改的贝塞尔函数的第二阶,所以我下载了最新版本的boost库并安装在 “c:\cygwin\lib\boost\u1\u38\u 0\”文件夹 我正在尝试从他们网站的“入门”部分运行“example.cpp”程序: 我使用一个简单的bashshell命令行从创建示例文件的目录编译:“g++-Wall example.c

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

我正在winxp机器上使用cygwin使用g++编程。 我需要修改的贝塞尔函数的第二阶,所以我下载了最新版本的boost库并安装在 “c:\cygwin\lib\boost\u1\u38\u 0\”文件夹

我正在尝试从他们网站的“入门”部分运行“example.cpp”程序:

我使用一个简单的bashshell命令行从创建示例文件的目录编译:“g++-Wall example.cpp”

我一直得到这样的信息: “boost/lambda/lambda.hpp:没有这样的文件或目录”

我在命令行中尝试了所有可能的-L,-L,-I选项组合以包括目录,但没有成功。还尝试将文件夹添加到我的windows系统的路径行中


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

你可能不太熟悉C++了吗?你似乎在混淆术语

C++程序分两步构建:编译和链接。在第一步中,分别处理每个源文件(通常称为.cpp)。每个.cpp文件通常使用多个头文件,因此编译器首先插入这些头文件(按字面意思)。这就是为什么它被称为“包含”

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

Boost是头文件和.cpp文件的集合。因此,编译器和链接器可能都需要找到Boost目录。从错误消息中可以清楚地看出,编译器步骤是问题所在。链接器不再需要标题


编译器将看到
#include
指令。这意味着它需要知道第一级
boost
目录在哪里。在这一点上,我猜这个路径将是代码> /LIB/BooSTy1138,0/包含代码<(代码> >查找/名称LAMBDA。HPP < /COD>鸟枪AQoCH)< /P> < P>如果你不是完全绑定到CygWin,你应该看看它给你一个完整的C++安装,与所有的库(比如Boost)一起安装。为你准备


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

我认为您需要
-I/lib/boost\u 1\u 38\u 0
——尽管这是一个非常不寻常的地方。您必须让我们知道您是如何安装它的,您是在您说的位置解压的,还是运行了makefiles?我想既然您提供了一个windows路径,您就没有在cygwin中安装它——您可能应该这样做。《unix入门指南》中的说明应该会有所帮助—尽管不要下载预构建的bjam,但它需要使用cygwin构建


但是,如果您对cygwin(或一般的unix)不太熟悉,我想您可能会发现使用本机windows工具会更容易,如。

谢谢大家提供的信息,这是一篇很好的介绍cygwin使用库的文章。 丹尼尔是对的。虽然任何变化都会产生错误,但下面的一行(使用caps i)会起作用:

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

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


p、 我只是在那个文件夹中下载并解压缩了boost,但因为我只使用头文件,所以可能不需要用cygwin编译。[cygwin附带的boost版本是1.33,它似乎没有贝塞尔函数。]

这是win7 cygwin64 g++5.4上的版本,而boost-1.64.7z是2017-7上的版本。谷歌没有显示任何有用的结果来启动windows上的boost(boost过时了吗?)

通过实验,我成功编译并运行了一个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

忘记包含程序:#include#include#include#include int main(){使用名称空间boost::lambda;typedef std::istream_迭代器in;std::for_each(in(std::cin),in(),std::cout最新版本的《入门指南》的链接是:你链接到1.35.+1,因为你难得有耐心用小词向外行解释基本概念-谢谢。@Ben关于基本概念的问题,与专家概念的问题:每个人都可以解释基本概念,但没有人能解释…同时,专家概念:每个人都试图解释这些,但没有人能解释。:@bordeo-你击中了它的头部!天才:)我可能会偷走它。除此之外,没有人想通过解释一个简单的概念来显得愚蠢!