安装boost库时候出错!

时间:2023-02-10 18:12:06
我编译安装boost库的时候提示错误,有一部分编译不过

错误信息:
D:C\boost\boost_1_33_0\boost/bind.hpp(1145):error c2143:syntax error:missing ';' before '<'
D:C\boost\boost_1_33_0\boost/bind.hpp(1145):error c2143:syntax error: ';'
D:C\boost\boost_1_33_0\boost/bind.hpp(1145):error c2143:syntax error: '<'
D:C\boost\boost_1_33_0\boost/bind.hpp(1145):error c2143:syntax error: template definitions cannot nest

 这只是其中的几个错误,类似的错误还很多,不知道大家遇到过这样的情况吗,是怎么解决的?

20 个解决方案

#1


// operator!

struct logical_not
{
    template<class V> bool operator()(V const & v) const { return !v; }
};

template<class R, class F, class L>
    bind_t< bool, logical_not, list1< bind_t<R, F, L> > >
    operator! (bind_t<R, F, L> const & f)
{
    typedef list1< bind_t<R, F, L> > list_type;
    return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) );
}

// relational operators

这个是出错处的代码,好像没有错误啊

#2


用的编译命令是
bjam -sTOOLS=msvc

#3


请问如何安装boost库?
哪里有boost库?

boost库提供了哪些功能?
boost库与stl是什么关系?

总之希望懂boost库的人介绍一下.

我也想用用

#4


最终的结果:
...failed updating 82 targets...
...skipped 30 targets...
updated 1013 targets...

#5


to:yhmhappy2006() 

http://www.stlchina.org/twiki/bin/view.pl/Main/BoostChina

#6


tks

#7


我的系统是winxp
装了visual studio 6.0和.net 2003

#8


你是怎么装的?

我怎么没出错?

#9


我的boost版本是1_33_1
先下载boost,解压,然后在boost解压目录下tools\build\jam_src下面运行build.bat

然后安装python
然后设置环境变量
然后运行命令:bjam -sTOOLS=msvc

就是按照
http://www.stlchina.org/twiki/bin/view.pl/Main/BoostInstall
上面说的做的阿,你是怎么做的?
最终的结果不是
...failed updating 82 targets...
...skipped 30 targets...
...updated 1013 targets...
吗?

我回去以后在我自己的电脑上又作了一次,还是有错误,在我一起住的兄弟的电脑上又重复了一次,还是不行啊

#10



#11


怎么没人回答了阿,没有用过boost的了吗,急啊

#12


我用 boost 都没装过,解压后在 VC 中的 Include 路径中加上他就是了。
我只编译过其中的正则表达式库,直接运行 VC 的 nmake 就 OK 了,没那么复杂的呀

#13


多线程的库也不用编译吗,解压以后直接用的话,有lib文件可以用吗?

#14


大多数的库都是只有头文件,不需要 lib 的,
如果你真的用到了那些库,到用的时候再编译也不迟,而且没一个库该怎么编译其文档中都有说明的,比如说正则表达式库就指明了需要编译,并给出了如下的提示:

...

Microsoft Visual C++ 6 and 7

You need version 6 of MSVC to build this library. If you are using VC5 then you may want to look at one of the previous releases of this library 

Open up a command prompt, which has the necessary MSVC environment variables defined (for example by using the batch file Vcvars32.bat installed by the Visual Studio installation), and change to the <boost>\libs\regex\build directory. 

Select the correct makefile - vc6.mak for "vanilla" Visual C++ 6 or vc6-stlport.mak if you are using STLPort.

Invoke the makefile like this:

nmake -fvc6.mak
You will now have a collection of lib and dll files in a "vc6" subdirectory, to install these into your development system use:

nmake -fvc6.mak install
The lib files will be copied to your <VC6>\lib directory and the dll files to <VC6>\bin, where <VC6> is the root of your Visual C++ 6 installation.

You can delete all the temporary files created during the build (excluding lib and dll files) using:

nmake -fvc6.mak clean 
Finally when you use regex++ it is only necessary for you to add the <boost> root directory to your list of include directories for that project. It is not necessary for you to manually add a .lib file to the project; the headers will automatically select the correct .lib file for your build mode and tell the linker to include it. 

Note that if you want to dynamically link to the regex library when using the dynamic C++ runtime, define BOOST_REGEX_DYN_LINK when building your project.

If you want to add the source directly to your project then define BOOST_REGEX_NO_LIB to disable automatic library selection.

There are several important caveats to remember when using boost.regex with Microsoft's Compiler:

There have been some reports of compiler-optimization bugs affecting this library, (particularly with VC6 versions prior to service patch 5) the workaround is to build the library using /Oityb1 rather than /O2. That is to use all optimization settings except /Oa. This problem is reported to affect some standard library code as well (in fact I'm not sure if the problem is with the regex code or the underlying standard library), so it's probably worthwhile applying this workaround in normal practice in any case. 
If you have replaced the C++ standard library that comes with VC6, then when you build the library you must ensure that the environment variables "INCLUDE" and "LIB" have been updated to reflect the include and library paths for the new library - see vcvars32.bat (part of your Visual Studio installation) for more details. 
If you are building with the full STLPort v4.x, then use the vc6-stlport.mak file provided and set the environment variable STLPORT_PATH to point to the location of your STLPort installation (Note that the full STLPort libraries appear not to support single-thread static builds). 
If you are building your application with /Zc:wchar_t then you will need to modify the makefile to add /Zc:wchar_t before building the library. 

GCC(2.95 and 3.x) 

....

#15


不好意思,不是 “而且没一个库该怎么编译其文档中都有说明的,”
是 “而且每一个库该怎么编译其文档中都有说明的,”

#16


谢了,我再 仔细看看线程库,是否需要build

#17


线程库是需要编译的。。。

Building the Boost.Threads Libraries
To build the Boost.Thread libraries using Boost.Build, simply change to the directory boost_root/libs/thread/build and execute the command:

bjam -sTOOLS=toolset
This will create four variants of the Boost.Threads library with the permuations of debug/release and runtime-link-dynamic/runtime-link-static. Note: Invoking the above command in boost_root will build all of the Boost distribution, including Boost.Threads.

The Jamfile supplied with Boost.Threads produces a static library named libboostthread. In addition, on Win32 platforms a boostthreadmon.dll and a coresponding import library are created. The source files that are used to create the libboostthread library are all of the *.cpp files found in boost_root/libs/thread/src, except for threadmon.cpp. These need to be built with the compiler's and linker's multi-threading support enabled. On Win32 platforms the boostthreadmon.dll is created from boost_root/libs/thread/src/threadmon.cpp. This, too, needs to be built with the compiler's and linker's multi-threading support enabled. If you want to create your own build solution you'll have to follow these same guidelines. One of the most frequently reported problems when trying to do this occurs from not enabling the compiler's and linker's support for multi-threading.

#18


哈,
这方面俺用boost在不少机器编译,都没什么问题。

可以参考一下
VC6上编译:
http://blog.csdn.net/roger_77/archive/2006/01/13/577998.aspx
在VC++.net2003上编译:
http://blog.csdn.net/roger_77/archive/2006/02/17/600955.aspx

积木版主翻译的boost官网的安装文档:
http://community.csdn.net/Expert/topic/4645/4645911.xml?temp=.8489954

#19


终于编译成功了,我这次没在vc6下编译,在.net2003下编译的,参考的文章是
http://blog.csdn.net/mythma/archive/2005/06/14/394456.aspx

谢谢大家了

#20


结果是
...updated 1571 targets...
弄了一天,编译了n次,终于成功了。

#1


// operator!

struct logical_not
{
    template<class V> bool operator()(V const & v) const { return !v; }
};

template<class R, class F, class L>
    bind_t< bool, logical_not, list1< bind_t<R, F, L> > >
    operator! (bind_t<R, F, L> const & f)
{
    typedef list1< bind_t<R, F, L> > list_type;
    return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) );
}

// relational operators

这个是出错处的代码,好像没有错误啊

#2


用的编译命令是
bjam -sTOOLS=msvc

#3


请问如何安装boost库?
哪里有boost库?

boost库提供了哪些功能?
boost库与stl是什么关系?

总之希望懂boost库的人介绍一下.

我也想用用

#4


最终的结果:
...failed updating 82 targets...
...skipped 30 targets...
updated 1013 targets...

#5


to:yhmhappy2006() 

http://www.stlchina.org/twiki/bin/view.pl/Main/BoostChina

#6


tks

#7


我的系统是winxp
装了visual studio 6.0和.net 2003

#8


你是怎么装的?

我怎么没出错?

#9


我的boost版本是1_33_1
先下载boost,解压,然后在boost解压目录下tools\build\jam_src下面运行build.bat

然后安装python
然后设置环境变量
然后运行命令:bjam -sTOOLS=msvc

就是按照
http://www.stlchina.org/twiki/bin/view.pl/Main/BoostInstall
上面说的做的阿,你是怎么做的?
最终的结果不是
...failed updating 82 targets...
...skipped 30 targets...
...updated 1013 targets...
吗?

我回去以后在我自己的电脑上又作了一次,还是有错误,在我一起住的兄弟的电脑上又重复了一次,还是不行啊

#10



#11


怎么没人回答了阿,没有用过boost的了吗,急啊

#12


我用 boost 都没装过,解压后在 VC 中的 Include 路径中加上他就是了。
我只编译过其中的正则表达式库,直接运行 VC 的 nmake 就 OK 了,没那么复杂的呀

#13


多线程的库也不用编译吗,解压以后直接用的话,有lib文件可以用吗?

#14


大多数的库都是只有头文件,不需要 lib 的,
如果你真的用到了那些库,到用的时候再编译也不迟,而且没一个库该怎么编译其文档中都有说明的,比如说正则表达式库就指明了需要编译,并给出了如下的提示:

...

Microsoft Visual C++ 6 and 7

You need version 6 of MSVC to build this library. If you are using VC5 then you may want to look at one of the previous releases of this library 

Open up a command prompt, which has the necessary MSVC environment variables defined (for example by using the batch file Vcvars32.bat installed by the Visual Studio installation), and change to the <boost>\libs\regex\build directory. 

Select the correct makefile - vc6.mak for "vanilla" Visual C++ 6 or vc6-stlport.mak if you are using STLPort.

Invoke the makefile like this:

nmake -fvc6.mak
You will now have a collection of lib and dll files in a "vc6" subdirectory, to install these into your development system use:

nmake -fvc6.mak install
The lib files will be copied to your <VC6>\lib directory and the dll files to <VC6>\bin, where <VC6> is the root of your Visual C++ 6 installation.

You can delete all the temporary files created during the build (excluding lib and dll files) using:

nmake -fvc6.mak clean 
Finally when you use regex++ it is only necessary for you to add the <boost> root directory to your list of include directories for that project. It is not necessary for you to manually add a .lib file to the project; the headers will automatically select the correct .lib file for your build mode and tell the linker to include it. 

Note that if you want to dynamically link to the regex library when using the dynamic C++ runtime, define BOOST_REGEX_DYN_LINK when building your project.

If you want to add the source directly to your project then define BOOST_REGEX_NO_LIB to disable automatic library selection.

There are several important caveats to remember when using boost.regex with Microsoft's Compiler:

There have been some reports of compiler-optimization bugs affecting this library, (particularly with VC6 versions prior to service patch 5) the workaround is to build the library using /Oityb1 rather than /O2. That is to use all optimization settings except /Oa. This problem is reported to affect some standard library code as well (in fact I'm not sure if the problem is with the regex code or the underlying standard library), so it's probably worthwhile applying this workaround in normal practice in any case. 
If you have replaced the C++ standard library that comes with VC6, then when you build the library you must ensure that the environment variables "INCLUDE" and "LIB" have been updated to reflect the include and library paths for the new library - see vcvars32.bat (part of your Visual Studio installation) for more details. 
If you are building with the full STLPort v4.x, then use the vc6-stlport.mak file provided and set the environment variable STLPORT_PATH to point to the location of your STLPort installation (Note that the full STLPort libraries appear not to support single-thread static builds). 
If you are building your application with /Zc:wchar_t then you will need to modify the makefile to add /Zc:wchar_t before building the library. 

GCC(2.95 and 3.x) 

....

#15


不好意思,不是 “而且没一个库该怎么编译其文档中都有说明的,”
是 “而且每一个库该怎么编译其文档中都有说明的,”

#16


谢了,我再 仔细看看线程库,是否需要build

#17


线程库是需要编译的。。。

Building the Boost.Threads Libraries
To build the Boost.Thread libraries using Boost.Build, simply change to the directory boost_root/libs/thread/build and execute the command:

bjam -sTOOLS=toolset
This will create four variants of the Boost.Threads library with the permuations of debug/release and runtime-link-dynamic/runtime-link-static. Note: Invoking the above command in boost_root will build all of the Boost distribution, including Boost.Threads.

The Jamfile supplied with Boost.Threads produces a static library named libboostthread. In addition, on Win32 platforms a boostthreadmon.dll and a coresponding import library are created. The source files that are used to create the libboostthread library are all of the *.cpp files found in boost_root/libs/thread/src, except for threadmon.cpp. These need to be built with the compiler's and linker's multi-threading support enabled. On Win32 platforms the boostthreadmon.dll is created from boost_root/libs/thread/src/threadmon.cpp. This, too, needs to be built with the compiler's and linker's multi-threading support enabled. If you want to create your own build solution you'll have to follow these same guidelines. One of the most frequently reported problems when trying to do this occurs from not enabling the compiler's and linker's support for multi-threading.

#18


哈,
这方面俺用boost在不少机器编译,都没什么问题。

可以参考一下
VC6上编译:
http://blog.csdn.net/roger_77/archive/2006/01/13/577998.aspx
在VC++.net2003上编译:
http://blog.csdn.net/roger_77/archive/2006/02/17/600955.aspx

积木版主翻译的boost官网的安装文档:
http://community.csdn.net/Expert/topic/4645/4645911.xml?temp=.8489954

#19


终于编译成功了,我这次没在vc6下编译,在.net2003下编译的,参考的文章是
http://blog.csdn.net/mythma/archive/2005/06/14/394456.aspx

谢谢大家了

#20


结果是
...updated 1571 targets...
弄了一天,编译了n次,终于成功了。

#21