openfoam安装中出现allmake error_如何更新OpenFOAM的版本?
這是協(xié)作翻譯的第四章,翻譯完感覺挺有意思的,分享給大家一起看看。
4.更新OpenFOAM版本
4.1 版本管理
OpenFOAM以兩種不同的方式分發(fā)。一種方式是使用Git倉(cāng)庫(kù)下載的倉(cāng)庫(kù)版本。倉(cāng)庫(kù)版本的版本號(hào)由附加的x標(biāo)記,例如 OpenFOAM2.1.x。該版本會(huì)經(jīng)常更新,并在某種程度上是開發(fā)版本。這個(gè)版本的更改和更新發(fā)布很快,但是,此版本中出現(xiàn)錯(cuò)誤的可能性也更大。由于此發(fā)行版經(jīng)常更新,因此在一個(gè)系統(tǒng)上安裝的2.1.x版本的內(nèi)容和另一個(gè)系統(tǒng)上安裝的2.1.x版本可能會(huì)不同。因此,每個(gè)安裝都有附加的信息來(lái)標(biāo)記不同版本的OpenFOAM。版本號(hào)隨附一個(gè)哈希碼,以唯一地標(biāo)識(shí)倉(cāng)庫(kù)版本的各個(gè)內(nèi)部版本,請(qǐng)參見列表9。每當(dāng)更新并重新編譯OpenFOAM時(shí),此哈希碼都會(huì)更改。如果內(nèi)部版本相同,則兩個(gè)OpenFOAM安裝處于相同級(jí)別。
Build : 2.1. x -9 d344f6ac6af列表 9: 倉(cāng)庫(kù)版本的完整版本標(biāo)識(shí)
除了倉(cāng)庫(kù)版之外,還有軟件包版本。與倉(cāng)庫(kù)版本相比,這些更新的間隔時(shí)間更長(zhǎng)。軟件包發(fā)行版的版本號(hào)不包含x,例如OpenFOAM 2.1.1。與倉(cāng)庫(kù)版相反,所有相同版本號(hào)的安裝都是相同的。由于發(fā)行周期較長(zhǎng),因此認(rèn)為發(fā)行包不太容易出現(xiàn)軟件錯(cuò)誤。
這些軟件版本有幾種不同的類型。這些是針對(duì)廣泛使用的Linux發(fā)行版(Ubuntu,SuSE和Fedora)的預(yù)編譯軟件包,也是一個(gè)源碼包。可以將源代碼包安裝在可編譯源代碼的任何系統(tǒng)上(通常是運(yùn)行Linux的各種計(jì)算機(jī),例如高性能計(jì)算集群,甚至運(yùn)行其他操作系統(tǒng)的計(jì)算機(jī))。例如Mac OSX甚至是Windows).
4.2 檢查更新
如果從倉(cāng)庫(kù)版本安裝了OpenFOAM,則更新非常簡(jiǎn)單。要更新OpenFOAM時(shí),只需使用Git來(lái)檢查是否有更新的源文件。在終端中切換到OpenFOAM安裝的根目錄,然后執(zhí)行g(shù)it pull。
如果倉(cāng)庫(kù)中有較新的文件,Git會(huì)下載它們并顯示已更改文件的摘要。如列表10所示。
user@host :~$ cd $FOAM_INST_DIRuser@host :~/ OpenFOAM$ cd OpenFOAM -2.1. x
user@host :~/ OpenFOAM / OpenFOAM -2.1. x$ git pull
remote : Counting objects : 67 , done .
remote : Compressing objects : 100% (13/13) , done .
remote : Total 44 ( delta 32) , reused 43 ( delta 31)
Unpacking objects : 100% (44/44) , done .
From git :// github . com / OpenFOAM / OpenFOAM -2.1. x
72 f00f7 ..21 ed37f master -> origin / master
Updating 72 f00f7 ..21 ed37f
Fast - forward
.../ extrude / extrudeToRegionMesh / createShellMesh .C | 10 +-
.../ extrude / extrudeToRegionMesh / createShellMesh .H | 7 +-
.../ extrudeToRegionMesh / extrudeToRegionMesh .C | 157 ++++++++ - - - - -
.../ Templates / KinematicCloud / KinematicCloud .H | 6 +-
.../ Templates / KinematicCloud / KinematicCloudI .H | 7 +
.../ baseClasses / kinematicCloud / kinematicCloud . H | 47 ++++++ -
6 files changed , 193 insertions (+) , 41 deletions ( -)
列表 10: 有可用的更新
如果OpenFOAM是最新的,則Git也將輸出相應(yīng)的消息,如列表11:
user@host :~/ OpenFOAM / OpenFOAM -2.1. x$ git pullAlready up -to - date .
列表 11: OpenFOAM是最新的
4.3 僅檢查更新
如果您只想檢查更新而沒有實(shí)際進(jìn)行更新,則可以使用特殊選項(xiàng)來(lái)調(diào)用Git(請(qǐng)參見列表12和13)。在這種情況下,Git僅檢查倉(cāng)庫(kù)并顯示其發(fā)現(xiàn)的結(jié)果,而不會(huì)實(shí)際進(jìn)行任何更改。負(fù)責(zé)此操作的選項(xiàng)是--dry-run。注意,這里調(diào)用了git fetch而不是git pull。git pull調(diào)用git fetch下載遠(yuǎn)程文件,然后調(diào)用git merge將檢索到的文件與本地文件合并。因此,檢查更新實(shí)際上是通過git fetch完成的。
user@host :~$ cd OpenFOAM / OpenFOAM -2.0. x/user@host :~/ OpenFOAM / OpenFOAM -2.0. x$ git fetch --dry - run -v
remote : Counting objects : 189 , done .
remote : Compressing objects : 100% (57/57) , done .
remote : Total 120 ( delta 89) , reused 93 ( delta 62)
Receiving objects : 100% (120/120) , 17.05 KiB , done .
Resolving deltas : 100% (89/89) , completed with 56 local objects .
From git :// github . com / OpenFOAM / OpenFOAM -2.0. x
5 ae2802 ..97 cf67d master -> origin / master
user@host :~/ OpenFOAM / OpenFOAM -2.0. x$
列表 12: 僅檢查更新–可用更新
user@host :~$ cd OpenFOAM / OpenFOAM -2.1. x/user@host :~/ OpenFOAM / OpenFOAM -2.1. x$ git fetch --dry - run -v
From git :// github . com / OpenFOAM / OpenFOAM -2.1. x
= [ up to date ] master -> origin / master
user@host :~/ OpenFOAM / OpenFOAM -2.1. x$
列表 13: 僅檢查更新–最新
4.4 安裝更新
在通過git pull下載更新后,需要編譯更改的源文件才能更新可執(zhí)行文件。這與安裝OpenFOAM時(shí)所執(zhí)行的方法相同。只需調(diào)用./Allwmake進(jìn)行編譯。該腳本可以識(shí)別更改,因此不會(huì)再次編譯未更改的文件。因此,更新后進(jìn)行編譯所需的時(shí)間少于安裝OpenFOAM時(shí)所需的時(shí)間。
4.4.1 工作流程
清單14顯示了更新現(xiàn)有OpenFOAM安裝所需的命令。但這僅適用于倉(cāng)庫(kù)版本(例如OpenFOAM-2.1.x)的更新。點(diǎn)版本(OpenFOAM的版本號(hào)中沒有x)的更新方式與倉(cāng)庫(kù)版本的更新方式不同。為簡(jiǎn)單起見,可以將Point Release(OpenFOAM-2.1.0→OpenFOAM-2.1.1)的更新視為全新安裝,請(qǐng)參見第3.6節(jié)。
將清單14中的前兩個(gè)命令更改為OpenFOAM安裝目錄。然后,通過調(diào)用git pull下載最新的源文件。
wclean all這一句可以省略。但是,如果編譯以某些錯(cuò)誤結(jié)束,則此命令通常可以解決問題,請(qǐng)參見第4.5.2節(jié)。最后一條語(yǔ)句會(huì)編譯源文件。如果以前未調(diào)用wclean all,則僅編譯發(fā)生更改的文件。如果調(diào)用了wclean all,則將編譯所有內(nèi)容。這可能將花費(fèi)更長(zhǎng)的時(shí)間。
如果有足夠的時(shí)間進(jìn)行更新(例如整夜),則應(yīng)在編譯之前調(diào)用wclean all。在大多數(shù)情況下,這將確保更新源的成功編譯。
cd $FOAM_INST_DIRcd OpenFOAM -2.1. x
git pull
wclean all (可以省略)
./ Allwmake
列表 14: 更新現(xiàn)有的OpenFOAM安裝的完整的工作流程
4.4.2 問題排查
如果編譯報(bào)告了一些錯(cuò)誤,則再次調(diào)用./Allwmake會(huì)很有幫助。這大大減少了成功操作的輸出(譯者注:成功編譯的源文件將不再顯示,只會(huì)在出錯(cuò)的位置顯示錯(cuò)誤信息),因此更容易找到編譯器的實(shí)際錯(cuò)誤消息。
4.5 更新問題
4.5.1 缺少安裝包
如果對(duì)操作系統(tǒng)進(jìn)行了升級(jí),則可能會(huì)發(fā)生確實(shí)安裝包的情況,這意味著在更新過程中已刪除了一些相關(guān)的軟件包(例如,如果需要這些軟件包來(lái)編譯OpenFOAM,但操作系統(tǒng)“認(rèn)為”這些軟件包不是必需的)。因此,如果在操作系統(tǒng)升級(jí)后重新編譯OpenFOAM失敗,則可能是缺少軟件包的原因。
4.5.2 庫(kù)的更新
庫(kù)更新后,必須重新編譯它們。否則,求解器將調(diào)用尚未編譯的庫(kù)函數(shù)。為了避免此問題,必須重新編譯相應(yīng)的庫(kù)。
wclean all列表 15: 使用wclean準(zhǔn)備重新編譯
一個(gè)更暴力的方式是重新編譯整個(gè)OpenFOAM,而不是重新編譯更新的庫(kù)。
4.5.3 更新的源無(wú)法編譯
在某些情況下,例如當(dāng)源文件的組織發(fā)生變化時(shí),源文件將無(wú)法立即編譯。又或者,如果有其他未知原因?qū)е聼o(wú)法編譯源代碼,則可以選擇完全重新編譯OpenFOAM。盡管編譯OpenFOAM需要花費(fèi)時(shí)間,但與跟蹤所有錯(cuò)誤相比,這可能花費(fèi)的時(shí)間更少。
要重新編譯OpenFOAM,需要重置源。有一個(gè)簡(jiǎn)單的命令可以解決此問題,而不是刪除OpenFOAM并重新安裝。如列表16所示:
git clean - dfx列表 16: 使用git重置源
列表16中列出的命令使Git擦除沒有跟蹤的所有文件。這意味著所有不屬于git-repository的文件都將被刪除。在這種情況下,將重置為OpenFOAM的官方git倉(cāng)庫(kù)版本。git clean從當(dāng)前目錄開始遞歸刪除所有不受版本控制的文件。選項(xiàng)-d表示還刪除了未跟蹤的文件夾。
執(zhí)行列表16中的命令后,必須按照3.3節(jié)中的說(shuō)明重新編譯源。
4.5.4 自有代碼無(wú)法運(yùn)行
更新您的OpenFOAM的倉(cāng)庫(kù)版本會(huì)產(chǎn)生有趣的效果。當(dāng)OpenFOAM的庫(kù)更新時(shí),它們的實(shí)現(xiàn)可能會(huì)更改。即使更新的代碼與先前的代碼完全兼容,更新后的編譯庫(kù)看起來(lái)也可能不同。因此,即使更新保持了代碼的兼容性,更新也可能破壞二進(jìn)制兼容性。因此,需要在基礎(chǔ)OpenFOAM安裝更新之后重新編譯您自己的代碼。
更新OpenFOAM之后加載丟失了二進(jìn)制兼容性的庫(kù)時(shí)會(huì)導(dǎo)致分段錯(cuò)誤。發(fā)生這種情況是因?yàn)槲覀冏约旱那蠼馄髟趩?dòng)時(shí)會(huì)動(dòng)態(tài)加載所需的OpenFOAM庫(kù),但是庫(kù)更新之后該庫(kù)某些對(duì)象的內(nèi)存布局已更改了。
有關(guān)此主題的更多信息,請(qǐng)參見以下資源:
https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C%2B%2B
https://en.wikipedia.org/wiki/Binary_code_compatibility
https://en.wikipedia.org/wiki/Source_code_compatibility
失去二進(jìn)制兼容性不會(huì)在每次更新后發(fā)生,并且并非在每個(gè)庫(kù)中都發(fā)生。因此,在更新以及成功使用其他自己創(chuàng)建的求解器和庫(kù)的很長(zhǎng)一段時(shí)間之后,您可能才會(huì)遇到此類問題。因此,用戶可能無(wú)法立即清楚這些問題的根源。如果您的代碼突然由于沒有原因的無(wú)法正常運(yùn)行了,請(qǐng)重新編譯并查看會(huì)發(fā)生什么。
總結(jié)
以上是生活随笔為你收集整理的openfoam安装中出现allmake error_如何更新OpenFOAM的版本?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python随机抽签列表中的同学值日_神
- 下一篇: 安装虚拟机的脚本