使用单独的Boost库进行编译,无需安装Boost

时间:2012-07-22 00:47:10

标签: c++ boost c++11 installation portability

我实现了一些我希望尽可能便携的C ++代码。我想避免依赖于需要root访问权限才能安装的库。此外,我更愿意避免在我的存储库中保留大型库的副本,而且我也不希望不进行库的用户级安装(仅仅因为我必须在多台计算机上手动安装它们)。 )

我想在我的项目中使用Boost的normal_distribution功能。我了解安装Boost的典型方法需要sudo apt-getsudo yum类型的命令,但我不会在运行此代码的系统上具有root访问权限。为了解决这个问题,我想知道是否可以在我的代码目录中放置Boost normal_distribution.cppnormal_distribution.hpp的副本,并使用这些文件编译/链接我的代码。这会有用吗?

读者可能想知道为什么我不只是在TR1或C ++ 11中使用normal_distribution实现。答案是我需要保持与仍然运行g ++ 4.1.x的大学管理集群的兼容性,这至少在我的经验中并不支持<TR1/random>

3 个答案:

答案 0 :(得分:3)

我认为BCP (Boost Copy)正是根据你的情况编写的。

答案 1 :(得分:2)

您应该查看ryppl项目,因为这正是它希望实现的目标。如果你按照github的链接你会发现模块化的提升,你可以继续尝试完整的ryppl安装。在任何情况下都有一个中途的房子,那是modularised boost。还有一个模块化的boost / cmake,使其更简单。这是ryppl希望获得提升的方向,它应该是非常有用的。我能看到的唯一缺点是使用python脚本为零安装安装程序的倾向。

如上所述,BCP也是为此目的而开发的,因此有一个选择。请注意,虽然boost正在经历svn-> git更改,这似乎正在影响某些结构,这反映在与当前模块化提升的一些不一致中,我不确定如何/如果这会影响BCP,因为我不知道那个系统。

答案 2 :(得分:0)

我在让BCP正常工作方面遇到了一些麻烦。我记录了BCP-related question in this StackOverflow post

从短期来看,我刚刚在我的代码库中添加了normal_distribution函数。我把它放在几个过去的StackOverflow帖子中。这个实现没有做任何花哨的模板,但它看起来非常类似于normal_distribution的Boost,TR1和C ++ 11 API。

#include "math.h"
double normal_distribution(double mean, double stdDev)
{
    //scale the number to appropriate distribution 
    return mean + (sampleNormal()*stdDev);
}

//get a number from normal distribution (mean=0, stdDev=1). 
double sampleNormal() {
    double u = ((double) rand() / (RAND_MAX)) * 2 - 1;
    double v = ((double) rand() / (RAND_MAX)) * 2 - 1;
    double r = u * u + v * v;
    if (r == 0 || r > 1) return sampleNormal(); //recursively re-generate number if doesn't meet criteria
    double c = sqrt(-2 * log(r) / r);
    return u * c;
}

感谢this StackOverflow post(用户Pete855217)提供了sampleNormal()函数,感谢this StackOverflow post(user5084)我已命名为normal_distribution()的函数。