[英]Compiling with individual Boost libraries, Without installing Boost
我正在實現一些我想使其盡可能可移植的C ++代碼。 我想避免依賴需要根訪問權限才能安裝的庫。 此外,我寧願避免將大型庫的副本保留在我的存儲庫中,而且我也寧願不進行用戶級的庫安裝(這是因為我必須在多台計算機上手動安裝它們)。
我想在項目中使用Boost中的normal_distribution
功能。 我知道典型的安裝Boost的方法需要sudo apt-get
或sudo yum
類型的命令,但是我在運行此代碼的系統上沒有root訪問權限。 為了解決這個問題,我想知道是否可以簡單地將Boost的normal_distribution.cpp和normal_distribution.hpp的副本放置在我的代碼目錄中,然后將這些代碼編譯/鏈接到我的文件中。 這行得通嗎?
讀者可能會想為什么我不僅僅在TR1或C ++ 11中使用normal_distribution
實現。 答案是,我需要與仍然運行g ++ 4.1.x的某些大學管理的集群保持兼容性,(至少以我的經驗),該集群不支持<TR1/random>
。
我想BCP(Boost Copy)的編寫正是考慮到您的情況。
您應該檢查ryppl項目,因為這正是它希望實現的目標。 如果您單擊指向github的鏈接,您將找到模塊化的boost,從那里您可以繼續嘗試完整的ryppl安裝。 無論如何,都有一個中途的房子,那就是模塊化的助推器 。 還有一個模塊化的boost / cmake使其更簡單。 這是ryppl尋求增強的方向,應該會很有幫助。 我唯一看到的缺點是傾向於將Python腳本用於零安裝安裝程序。
如上所述,BCP也是為此目的而開發的,因此可以選擇。 請注意,盡管boost正在經歷svn-> git更改,並且這似乎正在影響某些結構,這反映在與當前模塊化boost的某些不一致之處中,但我不確定這是否會影響BCP,因為我對此一無所知系統。
使BCP正常工作時遇到了一些麻煩。 我在此StackOverflow帖子中記錄了與BCP相關的問題 。
短期而言,我只是在我的代碼庫中添加了normal_distribution
函數。 我將其從過去的StackOverflow帖子中整理出來。 此實現沒有做任何花哨的模板內容,但它看上去與normal_distribution
的Boost,TR1和C ++ 11 API normal_distribution
。
#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;
}
感謝這個 sampleNormal()
函數的StackOverflow帖子 (用戶Pete855217),以及這個我命名為normal_distribution()
的函數的StackOverflow帖子 (user5084 normal_distribution()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.