Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用BCP提取可以构建的Boost子集?_C++_Linux_Boost_Build - Fatal编程技术网

C++ 如何使用BCP提取可以构建的Boost子集?

C++ 如何使用BCP提取可以构建的Boost子集?,c++,linux,boost,build,C++,Linux,Boost,Build,我正试图在Boost中使用提取头/库的子集,以便在我的项目中使用 操作系统:Linux Ubuntu 12.04 LTS x64 Boost版本:1.56.0,下载为 源代码来自boost.org 我也想使用bcp提供的自定义名称空间,但需要构建生成的代码,这并不像应该的那样简单 我会想到一个简单的办法 ./dist/bin/bcp --namespace=myboost build filesystem ../myboost 这就足以生成一组可以构建“文件系统”库的文件,但似乎还有额外的

我正试图在Boost中使用提取头/库的子集,以便在我的项目中使用

  • 操作系统:Linux Ubuntu 12.04 LTS x64
  • Boost版本:1.56.0,下载为 源代码来自boost.org
我也想使用bcp提供的自定义名称空间,但需要构建生成的代码,这并不像应该的那样简单

我会想到一个简单的办法

./dist/bin/bcp --namespace=myboost build filesystem ../myboost
这就足以生成一组可以构建“文件系统”库的文件,但似乎还有额外的问题不断出现

我已经在网上读了很多相关的文章,但是没有一篇能提供有效的解决方案

下面详细介绍了我遵循的步骤和相应的错误消息


提取boost 1.56.0 tarball后,我完成了以下工作:

./bootstrap.sh
./b2 tools/bcp
mkdir ../myboost
./dist/bin/bcp --namespace=myboost build filesystem ../myboost
复制到../myboost的文件不包括bootstrap.sh、b2、bjam或其他*.jam文件,这些文件似乎是“构建”目标应该包括的,对吗

其他来源(包括stackoverflow帖子)建议从原始boost位置复制这些文件:

cp bootstrap.sh boost-build.jam boostcpp.jam ../myboost
cd ../myboost
./bootstrap.sh
然后构建b2和bjam ok

运行b2时,会发生以下情况:

./b2

/work/approved-osslibs/boost/boost-1.56.0/myboost/tools/build/src/build /project.jam:262: in find-jamfile from module project
error: Unable to load Jamfile.
error: Could not find a Jamfile in directory 'tools/inspect/build'.
error: Attempted to find it with pattern '[Bb]uild.jam [Jj]amfile.v2 [Jj]amfile [Jj]amfile.jam'.
error: Please consult the documentation at 'http://www.boost.org'.
<error backtrace lines snipped>
这会导致错误:

/work/myboost/tools/build/src/build/project.jam:262: in find-jamfile from module project
error: Unable to load Jamfile.
error: Could not find a Jamfile in directory 'libs/wave/tool/build'.
error: Attempted to find it with pattern '[Bb]uild.jam [Jj]amfile.v2 [Jj]amfile [Jj]amfile.jam'.
error: Please consult the documentation at 'http://www.boost.org'.
<error backtrace lines snipped>
在这一点上,我遇到了以下错误:

/work/myboost/tools/build/src/build/targets.jam:397: in find-really
*** argument error
* rule project.is-registered-id ( id )
* called with: (  )
* missing argument id
/work/myboost/tools/build/src/build/project.jam:600:see definition of rule 'project.is-registered-id' being called
<error backtrace lines snipped>
/work/myboost/tools/build/src/build/targets.jam:397:in find real
***参数错误
*规则project.is-registered-id(id)
*调用时使用:()
*缺少参数id
/work/myboost/tools/build/src/build/project.jam:600:请参阅正在调用的规则“project.is registed id”的定义
我发现了与中引用的boost文件系统库相关的这个特定错误,但这个错误应该已经修复,所以我不希望在boost 1.56.0(最新版本)中看到它

发生了什么事

为什么bcp不能为一个boost库创建一个可执行的构建系统

为什么构建依赖于inspect和wave,它们为提取的“myboost”添加了比所需多得多的头文件


在此问题上的任何帮助都将不胜感激。

我今天尝试使用Boost 1.64(我在MS Windows下使用MSVC 2010进行编译)进行此操作时遇到了许多问题。顺便说一句,谢谢你给我指明了正确的方向

  • 从原始Boost目录中的
    bootstrap.bat
    b2-j8 tools\bcp
    开始。(此处以及下面,将
    8
    替换为同时运行的作业数。)
  • 当运行
    \dist\bin\bcp
    时,我发现我必须在命令行中包含
    tools\build\src
    libs\config\checks\architecture
    ,以便以后的构建工作
  • 我还必须将
    bootstrap.bat
    boost build.jam
    boostcpp.jam
    复制到我复制的boost目录中
  • 我不知道为什么,但我不得不重命名我原来的Boost目录(即运行
    bcp
    的目录),否则构建将以某种方式返回到那里
之后,切换到复制的boost目录并运行
bootstrap.bat
允许我构建精简版的boost,并更改顶级名称空间

b2-j 8工具集=msvc-10.0线程=多链接=共享地址模型=32变量=调试

b2-j 8工具集=msvc-10.0线程=多链接=共享地址模型=32变量=发布


move stage\lib lib32-msvc-10.0

这似乎只是使用Boost 1.55.0的Boost 1.56.0出现的问题,“bcp build filesystem../myboost”在myboost中生成所有必要的文件并成功构建OK。我最近也经历了同样的“打鼹鼠”游戏。我发现我必须手动添加libs
chrono
inspect
system
wave
,才能让它工作。我只能猜测当前版本的bcp不太擅长识别Boost组件之间的可传递依赖关系。不管怎样,加上另外两个lib(就像你在
wave
inspect
中所做的那样)就足以让它对我起作用了。我说得太快了。事实证明,我还需要做一个
cp-a$BOOST\u ROOT/BOOST/atomic$TARGET\u DIR/BOOST
来编译所有的东西。我不知道是不是我做错了™, 但这是我使用
bcp
的典型经验:它永远不会完全正确地获取依赖项,因此您必须始终进行一些手动复制,以恢复丢失的标题,或者第二次调用它时使用它丢失的lib的显式列表。仍然是一个有用的工具!
cd ../boost_1_56_0
./dist/bin/bcp --namespace=myboost wave ../myboost
cd ../myboost
./b2
/work/myboost/tools/build/src/build/targets.jam:397: in find-really
*** argument error
* rule project.is-registered-id ( id )
* called with: (  )
* missing argument id
/work/myboost/tools/build/src/build/project.jam:600:see definition of rule 'project.is-registered-id' being called
<error backtrace lines snipped>