Boost in Netbeans 7.1.1

2019-06-22 05:06发布

问题:

Trying to run the following:

        #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;
        }

I got some errors in cygwin so I decided to try out netbeans, and used the following as a guide. I added all links and the following for filesystem Project -> properties -> Linker ->Libraries -> Add option -> Other -> -lfile_system as noted here. I have run a separate test using #include<boost/any.hpp> so I am not currently doubting that my boost is not installed correclty.

It seems weird to me that it is "file_system", so I also tried "filesystem" but to no avail.

When i hold Ctrl and click on #include<boost/filesystem/operations.hpp> my netbeans brings up my operations.hpp file so it seems okay (linked properly internally that it can "see" what I want it to see).


The solution to installing boost came in the following form: 1 - If you have any path variables that are being used for Visual Studio you should temporarily change the variable during installation. This is a good guide. Once that is done, this is one step completed.

2 - Download and install MinGW. This is a very easy process and you can find the installer files here.

Once you have done these things (if you are in the same situation as me), you will now be able to properly install boost.

Horay!

回答1:

Using Boost with cygwin step by step

Create a new Project

It is better to take the names given here in this tutorial exactly. Later ask: It does not work, can then be easier to find.

I do not think I need to mention all T:\ must of course be replaced with your drive.

Project Name : Boost-cyg-Test

Now your Project should look like

Open main.cpp
Overwrite the generated code with the following. We want to that, first of all everything works without error.

Therefore, please do not use your own special code.
It is difficult to find a fault. Then told after several ask, to get:
I have used my own code

#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; }
  }

In this section we assume that "boost" is already compiled.

goto Tools -> Options

Your C++ Code Assistance options should look something like this.

If this is not so, we should let Netbeans create that for us.

Add New Tool Collection

After we have completed this dialog with OK, we should find the settings shown above. ( C++ Code Assistance options).

Copy all libs into the right place

Let's create a new folder 'boost'.

With a search tool, search in your compiled Boost folder for *.a
My Boost is compiled with the shared option so we find :

For our short App. we need only 2 files.

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

But if we're at it to copy two files, we can copy all files.
So mark all found .a files and copy them into the directory just created
T:\cygwin\lib\boost .

Now we do the same with our .dll files.
Mark all .dll files and copy it in your ?:\cygwin\bin directory.
If you only have compiled static librarys, you can skip this point.

Now it's time to modify our project settings.
As you can see i put my source Boost folder into cygwin

and

As we have already noted above, we need two .a files.
with Add Library navigate to T:\cygwin\lib\boost and select

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

Now you'll notice that this name was shortened by netbeans to:

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

This is somewhat confusing. It looks as if a .dll is standing here. But it is really a .a file.

Set a breakpoint in main.cpp. Now we start debug.

I have marked the important part, the two libs, with an arrow.
All libs are found and after make has finished, stops at the breakpoint.

The output:

Build Boost for Cygwin

For all who want to create boost with shared library itself.

Download boost_1_53_0.zip

Create a folder in your ?:\cygwin directory.
boost_1_53_0

Extract the zip file into that directory.
It should look like:

open a cmd window, cd to boost_1_53_0 directory.
To have a clean build we need a PATH that have only the cygwin home and bin.
In the cmd type.

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

and test the path.

PATH

Type

bootstrap.bat

Type

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

After some time the build is finished.
Now you have the same environment that we have used in the tutorial.

If you get a Error : gcc not found
copy (not rename) in ?:\cygwin\bin folder, for example : (names may differ).
i686-pc-cygwin-gcc-4.5.3.exe to gcc.exe
and
i686-pc-cygwin-g++-4.exe to g++.exe

Hope it helps you.



回答2:

Could you paste the error you get when compiling ? I am not used to compile programs in a Windows environment, but I think as Jesse Good suggested in a comment that you have a linker error.

You may solve it by using -lboost_filesystem instead of lfile_system.

To find out how your libs are called, you get the name of your lib (on my unix environment I have libboost_filesystem.so), strip the "lib" prefix and the ".so" or ".a" suffix (must be different in a Windows environment).



回答3:

if your boost installation is correct and you are sure about it then for Unable to resolve identifier try Code Assistance->Reparse Project from context menu of the project. It tries to recover broken code model by reparsing project from scratch. if that didn't workout try closing IDE and removing code model cache.

p.s. do you have compilation errors?