Netbeans 7.1.1中的Boost

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_system 中添加filesystem,如此处所述。我已经使用#include<boost/any.hpp>进行了单独的测试,因此目前并不怀疑我的boost安装有误。
对我来说,“file_system”看起来很奇怪,所以我也尝试了“filesystem”,但没有成功。
当我按住Ctrl并点击#include<boost/filesystem/operations.hpp>时,我的netbeans会弹出operations.hpp文件,因此它似乎没问题(内部正确地链接以便可以“看到”我想要看到的内容)。
安装boost的解决方案如下: 1 - 如果你使用Visual Studio正在使用任何路径变量,你应该在安装期间临时更改该变量。这是一份好的指南。完成此步骤后,就完成了第一步。
2 - 下载并安装MinGW。这是一个非常简单的过程,你可以在此处找到安装程序文件。
完成这些步骤后(如果你和我情况相同),你现在就能够正确地安装boost。
好极了!

3
"-lfile_system" 是错误的。通常应该使用 "-lboost_filesystem" 或 "-lboost_filesystem-mt",请检查您的库目录。您可能还需要 "-lboost_system"。 - Jesse Good
你得到了哪些错误? - 43l0v3k
Jesse - 我试过了,还是不行。 - jason m
1
你读了错误信息吗?Boost.Filesystem V3及更高版本需要std::wstring支持。你的标准库提供std::wstring吗? - Sam Miller
1
你应该确定 @Sam 发布的问题的答案。确保你使用的是 gcc4-g++(而不是 gcc-g++),并且使用最新的 libstdc++。你可以尝试编译一个非常简单的测试: #include <string> int main(int argc, char *argv[]) { std::wstring w; return 0; } - Markku K.
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/29778/discussion-between-moskito-x-and-jason-m - moskito-x
3个回答

8

逐步使用Cygwin中的Boost

创建一个新项目

enter image description here

最好按照本教程中给出的名称精确地命名。之后如果出现问题,可以更容易地找到错误。

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

项目名称:Boost-cyg-Test

enter image description here

现在你的项目应该像这样:

enter image description here

打开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为我们创建它。
添加新的工具集合。
完成此对话框后,我们应该找到上面显示的设置。(C++代码辅助选项)。
将所有库复制到正确的位置。
让我们创建一个名为“boost”的新文件夹。
使用搜索工具,在编译好的Boost文件夹中搜索*.a
我的Boost是使用共享选项编译的,所以我们可以找到:
对于我们的简短应用程序,我们只需要两个文件。
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 文件。 使用“添加库”(Add Library)导航到 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

输入图像描述

这有点令人困惑。看起来好像是一个 .dll 文件,但实际上它是一个 .a 文件。

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

输入图像描述

我已经用箭头标出了两个重要的库。
所有的库都被找到了,在 make 完成后,在断点处停止了。

输出结果:

输入图像描述

为 Cygwin 构建 Boost

对于所有想要创建具有共享库的 Boost 的人。

下载 boost_1_53_0.zip

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

输入图像描述

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

输入图像描述

打开一个 cmd 窗口,cd 到 boost_1_53_0 目录。
为了进行干净的构建,我们需要一个只包含 cygwin homebin 的 PATH。
在 cmd 中输入:

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

并测试路径。

PATH

enter image description here

Type

bootstrap.bat

图片描述:键盘上的Type键

类型

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

一段时间后,构建完成了。
现在您拥有了与教程中使用的相同环境。
如果出现错误:gcc not found
请复制(而不是重命名)i686-pc-cygwin-gcc-4.5.3.exe?:\cygwin\bin 文件夹中,例如:(名称可能有所不同)。
并将 i686-pc-cygwin-g++-4.exe 复制为 g++.exe
希望能对您有所帮助。

我已经完成了。好的新问题:我没有libboost_(等等).dll文件,但是我有cygboost_(等等).dll文件。话虽如此,我没有filesystem。这似乎很奇怪。我正在尝试您的boost安装说明,看看是否可以解决问题。 - jason m
当我运行你上面写的命令时,我会得到一个错误,将在我的问题下附加为截图。 - jason m
cygwin的make.exe在这里make-cyg.zip - moskito-x

0

你能把编译时出现的错误粘贴一下吗?我不习惯在Windows环境下编译程序,但我认为正如Jesse Good在评论中建议的那样,你可能遇到了链接器错误。

你可以通过使用-lboost_filesystem而不是lfile_system来解决它。

要找出你的库的名称,你需要获取你的库的名称(在我的Unix环境中,我有libboost_filesystem.so),去掉“lib”前缀和“.so”或“.a”后缀(在Windows环境中可能不同)。


这些libboost_filesystem.so文件会在哪里找到?我在我的~/usr/include/中没有看到它们,它们具体在哪里? - jason m
库(由链接器使用)位于 /usr/lib 或 /usr/local/lib。头文件(使用 #include 包含的文件)位于 /usr/include 或 /usr/local/include。 - Thibault Martin

0
如果您的Boost安装正确并且您对此非常确定,那么对于“无法解析标识符”的情况,请尝试从项目上下文菜单中选择代码辅助->重新解析项目。它会尝试通过从头开始重新解析项目来恢复损坏的代码模型。如果这没有起作用,请尝试关闭IDE并删除代码模型缓存。

附:您是否有编译错误?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接