C++ 如何将boost库包含到C++;节目?

C++ 如何将boost库包含到C++;节目?,c++,boost,compiler-construction,include,C++,Boost,Compiler Construction,Include,我正在尝试编译这个小程序: #include <boost/math/distributions/poisson.hpp> namespace boost { namespace math { template <class RealType = double, class Policy = policies::policy<> > class poisson_distribution; typedef poisson_dist

我正在尝试编译这个小程序:

#include <boost/math/distributions/poisson.hpp>

namespace boost { namespace math {

template <class RealType = double, 
          class Policy   = policies::policy<> >
class poisson_distribution;

typedef poisson_distribution<> poisson;

template <class RealType, class Policy>
class poisson_distribution
{ 
public:
  typedef RealType value_type;
  typedef Policy   policy_type;

  poisson_distribution(RealType mean = 1); // Constructor.
  RealType mean()const; // Accessor.
}

}} // namespaces boost::math
但现在我收到另一条错误消息:
boost/math/distributions/fwd.hpp
未找到

有没有办法强制编译器在正确的目录中搜索文件


我使用
g++
编译器。

在g++命令中需要包含路径:

g++ -I/opt/software/boost/1.45_ubuntu12.4lts_gcc4.5.3/include/  [rest of command here]
(也可能是指向库路径的链接)

一般来说,在源代码中放置完整路径不是一个好主意;这种做法完全破坏了可移植性的理念:)(这意味着,除了你自己的电脑之外,这种代码在世界上任何其他电脑上都无法编译,甚至半年后也会变得可疑)

不管怎样,如果您发现自己键入了像上面那样的长编译器行,那么确实是时候开始使用


您可能也会感兴趣。

要指定要搜索包含文件的目录,请执行以下操作:

-I /opt/software/boost/1.45_ubuntu12.4lts_gcc4.5.3/include

要指定要搜索库的目录,请执行以下操作:

-L /opt/software/boost/1.45_ubuntu12.4lts_gcc4.5.3/lib
要指定实际的库名称,请执行以下操作:

-l foo
当您的库名为libfoo

您不必在
-I
-L
-L
之后写入空格,因为现在它更具可读性

提示:

使用Makefile。也许您已经将boost include补丁导出到了某个环境变量中。

(这不是对这个问题的直接回答,而是一个考虑事项列表,我认为应该通过@uoɥʇpʎzɑC希望在这里看到的最终完整答案来解决。)

用C++处理第三方依赖的问题不是简单的。有很多方法可以实现这一点,选择适合您的方法取决于您的工具集和环境、您的项目管理以及您想要进行的权衡

对于Boost,我们必须记住它主要是只包含头的库,但有些组件也包含单独编译的部分(可以是静态或动态库,可以是组件的必需库,也可以是特定用例的必需库)。 例如,Boost.Filesystem需要编译,Boost.Graph仅在您想要解析GraphViz文件时需要编译,而Boost.Variant根本不需要它(是“仅头文件”库)。 有关详细信息,请参阅(这将重定向到最新版本,当前为1.61)

只使用Boost的header-only部分简化了许多考虑事项,但是,当然,有时您也需要其他部分

需要考虑的事项:

  • 您是只使用Boost的头部分还是需要一个 还有单独编译的部分吗?如果需要单独编译 部分,您使用静态库还是动态库?如果你使用 单独编译的部分,若要使用动态库,必须 决定在运行应用程序时如何查找动态库 (尤其是当您将项目作为二进制文件分发时)
  • 您的项目是作为源文件还是二进制文件分发的?二进制 在这种情况下,您主要担心开发人员的工作流程(但请参阅 上面关于使用动态库的一点)。在源代码的情况下,您需要 它很容易在其他计算机上编译
  • 您希望您的项目使用相同版本的Boost(至少 至少在您明确决定更改版本之前)或您想要更改版本 使用特定机器上安装的任何设备(假设有 没有API更改吗
  • 您是否同意使用Boost的副本(或部分副本) 项目还是希望所有项目都使用一个中心位置
  • 您希望对用户强制执行多少手动配置步骤(结束) 用户或开发人员,取决于上述其他问题)?(0是 可能更喜欢,但总有一个权衡。)
  • 您的项目是否仅限Windows、Linux等。?每个平台都有 它有自己的方式,取决于你对其他问题的回答 您应该使用的方法可能因操作系统而异。 对于我们的主题,跨平台通常意味着您必须 为您想要的每个平台实施相关的方法 支持
  • 您的工具集和构建环境是什么(例如Visual Studio、Qt、, 制作简单的脚本等)

  • 有些编辑器只支持CMake。目前还没有资格获得赏金。我不想要赏金:)我想知道如果我的
    访问人数将增加,我是否会在一个160k视图的问题下发布。我相信要求是,你需要在一个问题上获得一个高投票率的答案,以便该问题的视图计入你自己的访问人数。当然,接下来的问题是什么构成了一个高投票率的答案?构建系统期望的规范指南似乎非常广泛,甚至对于一篇博客文章来说也是如此。这似乎最适合于文档。此外,它似乎更适合由多个人来回答,因为人们通常不会像衣服一样切换构建系统,而且一个人不可能拥有完全最新的信息和经验(好的回答毕竟会提到常见的陷阱…)在四个以上不同的构建系统上。我想,关于文档的另一点。uoɥʇPʎzɹC是否也需要其他编译器?VisualStudio有自己的“通用构建系统”,但也不使用g++。如果每个构建系统都有一个答案(后限制因素),那么谁会获得声誉?
    
    -l foo