簡體   English   中英

使用單個Boost庫進行編譯,而無需安裝Boost

[英]Compiling with individual Boost libraries, Without installing Boost

我正在實現一些我想使其盡可能可移植的C ++代碼。 我想避免依賴需要根訪問權限才能安裝的庫。 此外,我寧願避免將大型庫的副本保留在我的存儲庫中,而且我也寧願不進行用戶級的庫安裝(這是因為我必須在多台計算機上手動安裝它們)。

我想在項目中使用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>

我想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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM