一、事前說明
單純的編譯sofa是很簡單的,但是想要同時編譯SofaPython3則比較難了,我編譯了v22.12分支,其他版本sofa的編譯也可以參考此篇教程,需注意的是:
1、確定SOFA需要的Python版本,sofa22.12需要的是python3.8,于是我使用了Ubuntu20.04。
例如Ubuntu22.04的系統python3.9。
當然,我在其他人那里看到可以給Ubuntu升級python,或者使用conda環境python,此篇教程中不討論上面兩種情況。//Add//:我驗證了使用conda環境編譯sofa,是可以實現的,首先conda activate yourEnv,然后cmake-gui運行編譯
2、針對Ubuntu20.04,必須要使用網絡HAT。不然你會走很多彎路,如何使用HAT本文第三節詳細寫了。
3、替換你需要的版本號,例如將v22.12更改為vXX.XX,git源碼:
3.1 選擇一個你想要的地址,新建一個文件夾,針對我而言,我在/home/computer/新建了一個Code文件夾,并在Code文件夾新建了一個sofa文件夾。
3.2 在/home/computer/Code/內建立一個terminal,粘貼下面指令:
git clone -b v22.12 https://github.com/sofa-framework/SofaPython3.git
3.3 在/home/computer/Code/sofa/內建立一個terminal,粘貼下面指令:
git clone -b v22.12 https://github.com/sofa-framework/sofa.git sofa/src
3.4 得到且必須是下面的文件分級效果:
--Code--SofaPython3--sofa--src
如果git失敗,多嘗試幾次即可,這個步驟不需要網絡HAT是可以git成功的。
3.5 到/home/computer/Code/sofa/src/applications/plugins/文件夾下手動刪除SofaPython3文件夾,且必須刪除;因為SOFA沒辦法通過build-in-tree的方式編譯SofaPython3。
二、基礎準備
1、sudo安裝make、git;這個就不演示了,非常簡單。
2、下面的指令無腦復制粘貼安裝。
2.1 安裝標準編譯工具:
sudo apt install build-essential software-properties-common
2.2 gcc,運行以下命令了解哪些 GCC 版本可用于你的ubuntu發行版:
apt-cache search '^gcc-[0-9.]+$'
然后,使用常用命令安裝最新的(以 gcc-10 為例):
sudo apt install gcc-10
2.3 注意,我就是使用的clang,不過gcc也可以盡量安裝一下,clang不能用的情況下可以替換使用gcc。Clang, GCC 的替代品。它的編譯速度大約快兩倍!建議安裝 Clang 5 的更高版本,了解哪些 Clang 版本可用于你的發行版,運行以下命令:
apt-cache search '^clang-[0-9.]+$'
然后,使用常用命令安裝最新的命令(以 clang-12 為例):
sudo apt install clang-12
2.4 CMake:Makefile 生成器:
在編譯 SOFA 項目之前,需要 CMake 對其進行配置。請注意,SOFA 至少需要 CMake 3.12。
sudo apt install cmake cmake-gui
2.5 相比于(2.4)的cmake,更推薦安裝Ninja:
sudo apt install ninja-build
2.6 安裝Qt 5.12.8、Boost 1.71.0、Eigen 3.3.7、Python 3.8.10、pybind11 2.6.2、GLEW 2.1.0、Zlib 1.2.11、libPNG 1.6.37、libJPEG 8c、libTIFF 4.3.0:
sudo apt update
sudo apt install qt5-qmake qtbase5-dev qtchooser qtbase5-dev-tools
sudo apt install libboost-all-dev
sudo apt install libopengl0
sudo apt install libeigen3-dev
sudo apt install python3.8 python3.8-dev python3.8-distutils
sudo apt install pybind11-dev
sudo apt install libglew-dev
sudo apt install zlib1g-dev
sudo apt install libpng-dev
sudo apt install libjpeg-dev
sudo apt install libtiff-dev
2.6 基礎python:
sudo apt update
sudo apt install python3.8 python3.8-distutils curl
curl -L https://bootstrap.pypa.io/pip/3.8/get-pip.py -o get-pip38.py
python3.8 get-pip38.py
python3.8 -m pip install --upgrade pip
echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc
source ~/.bashrcpython3.8 -m pip install numpy scipy pybind11
python3.8 -m pip show numpy pybind11 scipy
2.7 安裝cache:
sudo apt install ccache
2.8 如果有興趣,可以訪問下面鏈接安裝qt,當然這個版本要對應你要編譯的SOFA,這個在sofa 的 github還有官方文檔都有介紹,針對sofa22.12而言,就是5.12.8:(注意,這個沒有網絡HAT的話,在Ubuntu訪問會被禁止訪問下載網頁,可以在windows通過迅雷下載器下載,然后u盤或者向日葵文件傳輸等方式給弄到Ubuntu中)
https://download.qt.io/archive/qt/5.12/5.12.8/
三、網絡HAT
如果你在國內,不得不說這一步是必須的,不然編譯是很難成功,編譯過程中會訪問github去下載SOFA插件的源碼,除非你將插件的源碼自己git下來,然后放到sofa文件夾外,例如第一步的SofaPython3
言歸正傳:
1、https://archive.org/download/Software_for_windows_pkg下載Software.for.Windows-0.20.39-x64-linux.tar.gz
2、新建終端并解壓
tar zxvf Software.for.Windows-0.20.39-x64-linux.tar.gz
3、進入解壓文件,新建一個terminal
4、在terminal中鍵入下面指令,會將software啟動起來,但是可能是紅色報錯的狀態,不是我下面圖片中的樣子,不用擔心:
./cfw
5、粘貼你的URL,下載:
6、然后粘貼你的URL鏈接到火狐瀏覽器,會下載一個文件,使用文本編輯器打開,然后CTRL+A全選,并CTRL+C復制
7、在home/computer/文件夾下使用CTRL+H快捷鍵,使得隱藏的.config文件夾顯示出來
找到./clash/config.yaml文件,使用文本編輯器打開
使用CTRL+A全選,并CTRL+V粘貼,保存后關閉
8、./cfw重啟clash就可以正常使用了
9、手動配置全局HAT,不配置有些網頁無法訪問
打開 設置>網絡>網絡HAT,改為手動,并設置回環地址,端口和clash保持相同
四、開始編譯
1、打開home/computer/Code/sofa/文件夾
mkdir build
文件夾分級應該是,這種叫Out-Tree編譯:
--Code--SofaPython3--sofa--src--build
2、分別鍵入下面兩行指令:
cd buildcmake-gui ../src/
3、點擊Configure,選擇Ninja,然后手動指定C和C++編譯器,前文講到了本文使用clang,也可以使用gcc和g++;
可以看出來,使用了HAT,可以非常順利的配置結束:(注:不使用HAT,會停止到Adding library Sofa.GUI.Qt, 如果你沒有使用HAT你會明白我是什么意思,但如果運氣好的話(WALL漏了)存在配置通過的可能)
4、鍵入python搜索,找到SOFA_FETCH_SOFAPYTHON3,勾選為True,點擊Configure
然后點擊Generate
generate之后的樣子如下:
5、編譯,關閉cmake-gui(叉號關閉)后,在terminal依次鍵入,在build文件夾會多出一個install文件夾,這就是完全編譯SOFA:
ninja
ninja install
五、最后驗證
打開/home/computer/Code/sofa/build/文件夾,新建一個terminal,鍵入下面指令:
pythonimport Sofa
只要如最后一張圖不報錯即成功!!!
Congratulations!
六、寫在最后
如果不在意版本可以直接使用下面指令安裝,直接使用SOFA
Installing SOFA latest release from conda
Quick install (recommanded)
Full SOFA core install with SofaPython3 plugin
conda install sofa-app sofa-python3 --channel sofa-framework --channel conda-forge
Or
Full SOFA core install with all packaged plugins
conda install sofa-app sofa-python3 sofa-stlib sofa-modelorderreduction sofa-beamadapter sofa-softrobots sofa-cosserat --channel sofa-framework --channel conda-forge
Testing install
Run SOFA application with its GUI
runSofa -l Sofa.GUI.Qt -g qt
Run SOFA application with its GUI and SofaPython3 plugin
runSofa -l Sofa.GUI.Qt -g qt -l SofaPython3
Please open an issue to report any problem.