【问题标题】:Including Relevant Boost Libraries with C++ Source (Using Visual Studio)包含具有 C++ 源代码的相关 Boost 库(使用 Visual Studio)
【发布时间】:2010-09-13 20:02:11
【问题描述】:

我有一个正在从事的项目(针对学校),我正在研究 Boost 库以获取解决方案。我需要一些方法来将所需的 Boost 源代码与我的应用程序一起分发,以便可以在没有安装在系统上的库进行编译的情况下对其进行编译。 (学校的电脑几乎没有你能提到的任何东西。学校去年才安装了 CVS。但他们确实有 VS2005)

注意:我在 Vista 上使用 Visual Studio 2005。我的系统上有 Boost 1.34.1,我使用了 automatic installer。我遇到的文档说明了有关使用 BCP 命令的内容,但该命令似乎没有复制任何内容。 (我使用绝对路径来调用 BCP,所以我最终不会调用错误的命令。)

编辑:我正在尝试使用 RegEx 库。

编辑:我用于 BCP 的命令是:"c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" boost/regex.hpp regex\

然后返回:no errors detected

【问题讨论】:

  • 你能发布你用来运行 bcp 的命令吗?这可能有助于确定问题。

标签: c++ visual-studio boost


【解决方案1】:

这取决于您使用的库。如果您使用的是仅包含头文件的库(大多数 boost 库都是,一些值得注意的例外是信号、序列化和日期/时间),您可以复制这些头文件。否则,您也需要复制 cpp 文件。我的建议是将它们包含在您的项目中。

所以,这就是你要做的:你从你的项目设置(工具->选项->项目和解决方案->vc++目录->包含文件)中删除boost包含路径。尝试编译。看看哪个包含失败。将该文件从您的 boost 目录复制到您的项目目录。起泡、冲洗、重复,直到您的项目编译完成。

如果您使用的库需要 .cpp 文件,您将在链接时收到错误消息。将您使用的库的所有 .cpp 文件复制到项目目录并将它们全部添加到您的解决方案中。重建并交叉手指。

如需更详细的答案,请发布您正在使用的库。

【讨论】:

  • 我正在使用 RegEx 库。
【解决方案2】:

尝试使用以下命令调用 bcp:

"c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" --boost="c:\Program Files\boost\boost_1_34_1" regex regex

--boost 告诉 bcp boost 的安装位置,第一个 regex 是模块的名称,第二个是目标目录。

哦,如果您还没有注意到,libs\regex\build\ 中有 Visual C++ 生成文件。

【讨论】:

  • 谢谢,会试试的。如果有什么不同,我使用的是标准 C++,而不是 Microsoft 对其的扩展。
【解决方案3】:

根据您使用正则表达式的评论,您可以执行以下操作:下载“正常”的 boost 分发 zip 文件。在某处解压。转到库/正则表达式/src。将该目录中的所有 .cpp 文件复制并粘贴到您的项目目录中。将它们添加到您的 Visual Studio 项目中(右键单击,“添加”->“现有项”)。然后转到 boost/regex 并将其中的所有内容(头文件)复制到您的项目目录(包括子目录)。将您自己的 .cpp 和 .h 文件中的所有包含从 #include 更改为“regex.hpp”,以便它包含本地目录中的标头,而不是系统范围内安装的标头。确保从您的项目设置中删除系统范围的包含路径,就像我在上一篇文章中所说的那样。

然后,编译您的代码。您将收到许多“缺少包含文件”错误,因为正则表达式依赖于其他 boost 库。重复整个过程:转到 boost/xxx ,其中 xxx 是正则表达式正在寻找的库。您可以从错误消息中推断出库。将编译器要求的所有内容复制到您自己的项目目录中。在它工作之前,您可能需要稍微调整一下目录布局。这实际上是一步一步的方法,每一步都是相同的:识别丢失的文件,复制它,查看是否找到并修复了该包含,然后继续下一步。恐怕这是无聊的工作。

您可以使用 bcp 将这一切自动化,但对于像学校项目这样的一次性项目,我不会打扰;仅当您认为未来的项目需要您提供独立的 zip 文件时。

【讨论】:

  • 我可能会在未来的项目中使用 Boost。教授不介意。
  • 您可以花费数小时来发现这样的依赖关系。 bcp 是一种更简单的方法。此外,添加包含路径比编辑包含路径要好得多 - 对于 boost 的某些子集,有数千个需要编辑。
【解决方案4】:

这对我来说似乎有点奇怪。如果您正在分发源代码,那么您分发给的人应该能够安装 boost。然后,如果他们已经有了 boost,没有重复和混乱,或者如果他们没有并且你需要一个构建的库,他们将为他们的系统构建正确的库。如果您分发的人不适合安装 boost,那么我建议在安装包中分发二进制文件,以使其尽可能容易。

【讨论】:

  • 他说这是为了学校项目。给作业评分的人不会为项目安装库,他们会花几天时间为所有不同的学生摆弄这些库。作业通常要求是独立的。
  • 罗尔说得对。我需要将库与其余的源代码一起嵌入。
【解决方案5】:

我以前遇到过这种情况,将 boost 嵌入到我的项目中。每个单独的 boost 库都带有各种项目文件,用于使用不同的 make 系统(Jam、make、Visual Studio 6...)进行构建,但对于较新版本的 VS,它们从未如此出色。

我总是喜欢创建一个新的项目文件并将 boost 直接嵌入到我的项目中。这很简单,您只需添加所有源文件并正确设置项目选项。但是有一个警告,那就是您必须将库输出文件命名为 boost 所做的那样,因为它们的包含文件依赖于此。

完成此操作后,您可以像分发项目中的任何其他文件一样分发 boost 库。

【讨论】:

    【解决方案6】:

    编译boost就是这样的PITA;只有积极进取的学生才能做到。您是否考虑过捆绑安装程序?

    【讨论】:

    • 我实际上只是将预编译的调试库转储到正确的相关文件夹中。
    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2019-02-02
    • 2016-08-14
    • 1970-01-01
    相关资源
    最近更新 更多