在Windows上使用Boost和Cygwin

时间:2009-02-26 10:23:55

标签: windows boost cygwin

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

我在winxp机器上使用cygwin使用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'正在调用子目录中的其他头文件。

5 个答案:

答案 0 :(得分:10)

你可能不熟悉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.hpp霰弹枪appraoch)

答案 1 :(得分:3)

如果您还没有完全与cygwin结合,那么您应该看看http://nuwen.net/mingw.html,它为您提供了一个完整的MinGW C ++安装,并为您设置了所有库(例如Boost)。

编辑:我应该明确表示除了Cygwin之外你可以使用这个MinGW安装,而不是替代。只需确保MingW bin目录在Cygwin之前出现在PATH中。

答案 2 :(得分:2)

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

但如果您对cygwin(或一般的unix)不是很熟悉,我认为您可能会发现使用本机Windows工具更容易 - 就像在Neil Butterworth's answer中一样。

答案 3 :(得分:2)

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

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

我还会在接下来的几天内查看MinGW。

P.S。我只是在该文件夹中下载并解压缩了boost,但由于我只使用头文件,因此我可能不需要使用cygwin进行编译。 [cygwin附带的助推版本是1.33,似乎没有贝塞尔功能。]

答案 4 :(得分:0)

这是在win7 cygwin64 g ++ 5.4和2017-7上的boost-1.64.7z。谷歌没有显示任何有用的结果,因为开始使用Windows时加速(是时尚了吗?)。

通过实验,我设法编译并运行一个boost图示例程序,如下所示:

  :: 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