5

尝试运行以下命令:

        #include<iostream>
        #include<boost/filesystem/operations.hpp>

        namespace bfs=boost::filesystem;
        int main()
        {
        bfs::path p("second.cpp");
        if(bfs::exists(p))
        std::cout<<p.leaf()<<std::endl;
        }

我在 cygwin 中遇到了一些错误,所以我决定尝试 netbeans,并使用以下内容作为指南。Project -> properties -> Linker ->Libraries -> Add option -> Other -> -lfile_systemhere所述,我为文件系统添加了所有链接和以下内容。我已经运行了一个单独的测试,#include<boost/any.hpp>所以我目前并不怀疑我的 boost 没有正确安装。

对我来说它是“file_system”似乎很奇怪,所以我也尝试了“filesystem”但无济于事。

当我按住Ctrl并单击#include<boost/filesystem/operations.hpp>我的 netbeans 时,会显示我的operations.hpp文件,所以它看起来还不错(内部正确链接,它可以“看到”我希望它看到的内容)。


安装 boost 的解决方案采用以下形式: 1 - 如果您有任何用于 Visual Studio 的路径变量,则应在安装期间临时更改该变量。这是一个很好的指南。一旦完成,这是完成的一步。

2 - 下载并安装 MinGW。这是一个非常简单的过程,您可以在此处找到安装程序文件。

一旦你完成了这些事情(如果你和我的情况一样),你现在就可以正确安装 boost。

万岁!

4

3 回答 3

8

逐步使用 Boost 和 cygwin

创建一个新项目

在此处输入图像描述

最好准确使用本教程中给出的名称。后来问:不行,以后可以更容易找到。

我认为我不需要提及所有T:\当然必须用您的驱动器替换。

项目名称 :Boost-cyg-Test

在此处输入图像描述

现在你的项目应该看起来像

在此处输入图像描述

打开 main.cpp
使用以下内容覆盖生成的代码。我们想要做到这一点,首先,一切都可以正常工作。

因此,请不要使用自己的特殊代码。
很难找到故障。然后告诉经过几次询问,得到:
我使用了我自己的代码

#include <iostream>
#include <boost/filesystem.hpp>
using namespace std;
using namespace boost::filesystem;

int main()
  {
    path p("second.cpp");
      if (exists(p)) { std::cout<<p.leaf()<<std::endl; }
  }

在本节中,我们假设“boost”已经编译。

转到工具 -> 选项

您的 C++ 代码辅助选项应如下所示。

在此处输入图像描述

如果不是这样,我们应该让 Netbeans 为我们创建它。

在此处输入图像描述

添加新工具集合

在此处输入图像描述

在我们用 OK 完成此对话框后,我们应该找到上面显示的设置。(C++ 代码辅助选项)。

将所有库复制到正确的位置

让我们创建一个新文件夹“boost”。

在此处输入图像描述

使用搜索工具,在您编译的 Boost 文件夹中搜索*.a
MyBoost编译,shared option因此我们发现:

在此处输入图像描述

对于我们的简短应用程序。我们只需要 2 个文件。

libboost_filesystem-gcc45-mt-d-1_53.dll.a
libboost_system-gcc45-mt-d-1_53.dll.a

但是如果我们要复制两个文件,我们可以复制所有文件。
所以标记所有找到.a的文件并将它们复制到刚刚创建的目录
T:\cygwin\lib\boost中。

现在我们对我们的.dll文件做同样的事情。
标记所有.dll文件并将其复制到您的?:\cygwin\bin目录中。
如果你只编译过静态库,可以跳过这一点。

在此处输入图像描述

现在是时候修改我们的项目设置了。
如您所见,我将源 Boost 文件夹放入 cygwin

在此处输入图像描述

在此处输入图像描述

正如我们上面已经提到的,我们需要两个.a文件。
使用添加库导航到T:\cygwin\lib\boost并选择

libboost_filesystem-gcc45-mt-d-1_53.dll.a
libboost_system-gcc45-mt-d-1_53.dll.a

现在您会注意到这个名称已被 netbeans 缩短为:

boost_filesystem-gcc45-mt-d-1_53.dll
boost_system-gcc45-mt-d-1_53.dll

在此处输入图像描述

这有点令人困惑。看起来好像a.dll站在这里。但它确实是一个.a文件。

在 main.cpp 中设置断点。现在我们开始调试。

在此处输入图像描述

我已经用箭头标记了重要的部分,即两个库。
找到所有库,并在 make 完成后停止在断点处。

输出:

在此处输入图像描述

为 Cygwin 构建 Boost

对于所有想要使用共享库本身创建提升的人。

下载 boost_1_53_0.zip

在 ?:\cygwin 目录中创建一个文件夹。
boost_1_53_0

在此处输入图像描述

将 zip 文件解压缩到该目录中。
它应该看起来像:

在此处输入图像描述

打开一个cmd窗口,cd到boost_1_53_0目录。
为了有一个干净的构建,我们需要一个只有cygwin homeand的 PATH bin
在 cmd 类型中。

SET PATH=T:\cygwin;T:\cygwin\bin 

并测试路径。

PATH

在此处输入图像描述

类型

bootstrap.bat

在此处输入图像描述

类型

.\b2 --build-dir=T:\boost-cyg toolset=gcc variant=debug link=shared runtime-link=shared

一段时间后构建完成。
现在您拥有了我们在教程中使用的相同环境。

如果您收到错误:gcc not found
在文件夹中复制(不重命名)?:\cygwin\bin,例如:(名称可能不同)。
i686-pc-cygwin-gcc-4.5.3.exegcc.exe

i686-pc-cygwin-g++-4.exeg++.exe

希望它可以帮助你。

于 2013-04-28T14:40:48.450 回答
0

你能粘贴你编译时得到的错误吗?我不习惯在 Windows 环境中编译程序,但我认为 Jesse Good 在评论中建议您有链接器错误。

您可以通过使用-lboost_filesystem代替来解决它lfile_system

要找出你的库是如何被调用的,你得到你的库的名称(在我的 unix 环境中,我有 libboost_filesystem.so),去掉“lib”前缀和“.so”或“.a”后缀(必须不同在 Windows 环境中)。

于 2013-05-03T09:43:07.507 回答
0

如果你的 boost 安装是正确的并且你确定它,那么从项目的上下文菜单中Unable to resolve identifier尝试Code Assistance-> Reparse Project。它试图通过从头开始重新解析项目来恢复损坏的代码模型。如果那没有锻炼,请尝试关闭 IDE 并删除代码模型缓存。

ps 你有编译错误吗?

于 2013-05-03T11:22:46.433 回答