2016-12-19 46 views
3

我最近構建了一個較舊版本的GCC,並將其安裝在我的主目錄(規格~/local/gcc-5.3.0)中。但是,我只需要該編譯器用於CUDA項目,並且將在其餘時間使用系統編譯器(GCC 6.2.1)。所以,我想我需要找到一種方法在需要時切換它們,並以一種方式改變庫並適當地包含路徑。在不同的GCC版本之間切換

據我所知,update-alternatives是這樣做的一種方式,但它似乎需要設置根權限,我沒有。

下一個最好的事情可能是寫一個shell功能.bashrc確保以下幾點:

  • 系統和地方GCC

  • 之間的每個電話交換機每當一個開關後,它會調整這樣當選擇本地gcc時,它首先查找在查看系統路徑(如/usr/local/includeusr/local/lib)之前自行安裝的頭文件和庫。之前的answer建議修改LD_LIBRARY_PATH應該足夠了,因爲GCC安裝「知道」它自己的頭文件和靜態庫在哪裏(我不確定它是否正確,我想我可能需要修改CPATH等)。

以上是實現此目的的最佳方法嗎?如果是這樣,我應該在實現這樣的功能時設置什麼路徑?

+0

我個人的做法,這是不是很複雜的:我有一個shell腳本,只是增加了CUDA bin目錄和匹配gcc bin目錄到$ PATH。其實我有多個腳本來保持不同的CUDA版本。當我停止使用CUDA或想切換到其他版本時,我打開一個新的shell。 – tera

+0

你提到只給gcc添加'bin'目錄到'PATH'。如果不是include目錄,是不是也需要修改'LD_LIBRARY_PATH'? – rahul1210

+1

nvcc和gcc都知道它們的庫位於何處,所以只需更改$ PATH就足夠了。 – tera

回答

1

以上是實現此目的的最佳方法嗎?如果是這樣, 我應該在實現這樣的功能時設置什麼路徑?

正如其他人指出的,PATHLD_LIBRARY_PATH是強制性的。您也可以更新MANPATH以確保完整性。

我不建議在.bashrc中重新發明輪子,而是建議使用一些已知但非常方便和模塊化的Environment Modules,它們是專門爲此目的而設計的。你可以使用他們像(一旦你設置配置爲GCC/3.1.1):

$ module load gcc/3.1.1 
$ which gcc 
/usr/local/gcc/3.1.1/linux/bin/gcc 
$ module unload gcc 
$ which gcc 
gcc not found 
+0

看起來像一個非常漂亮的工具來配置shell環境變量。現在只需要弄清楚如何爲我的目的實際編寫一個模塊文件。謝謝你的幫助。 – rahul1210

相關問題