Linux上编译和安装SOFA23.06
前言
你可以直接使用编译安装好的SOFA版本Installing from all-included binaries (v23.06.00):
如果你想自己编译,可以看我下面写的内容,不过绝大多数是从官网来的,如果和官网有出入,建议还是以官网为准。
在Linux下安装了SOFA23.06(23年的最新版),建议先参考油管的视频熟悉一下流程,虽然它的安装距离23年有点久远了,但是基本上按它的步骤来没什么问题:
How to build SOFA on Linux (xubuntu18.04)
博主使用的是自己编译,后续要自己安装其他插件什么的适配性比较好,安装Linux版本主要使用官网的说明来安装,注意SOFA policy is to support only the latest Ubuntu LTS.(SOFA目前只支持在Ubuntu LTS上安装):
SOFA build on linux
空间足够就把官网文档的所有命令都复制进去安装(下面标注可选的可以不装):
构建工具
编译器
首先安装标准编译工具:
sudo apt install build-essential software-properties-common
gcc
要了解哪些 GCC 版本可用于您的发行版,请运行以下命令:
apt-cache search '^gcc-[0-9.]+$'
然后,使用常用命令安装最新的(以 gcc-11 为例):
sudo apt install gcc-11
Clang
Clang 是 GCC 的替代品。它的编译速度大约快两倍!建议安装 Clang 5 或更高版本。
要了解哪些 Clang 版本可用于您的发行版,请运行以下命令:
apt-cache search '^clang-[0-9.]+$'
然后,使用常用命令安装最新的命令(以 clang-12 为例):
sudo apt install clang-12
CMake:Makefile 生成器
在编译 SOFA 项目之前,需要 CMake 对其进行配置。请注意,SOFA 至少需要 CMake 3.12。
sudo apt install cmake cmake-gui
(可选)ninja-构建系统
Ninja 是 Make 的替代品。它可以更好地处理增量生成。
sudo apt install ninja-build
(可选)CCache:缓存系统
我们建议您使用 ccache。这绝不是强制性的,但如果对 SOFA 进行更改,它将大大缩短编译时间。
sudo apt install ccache
依赖
SOFA 需要一些依赖:
Qt (>= 5.12.0) 【带有Qt Charts 和 Qt WebEngine】
建议使用统一安装程序将 Qt 安装在您的用户目录中。确保启用 Qt Charts 和 Qt WebEngine 组件。
安装的网址链接:
https://download.qt.io/official_releases/online_installers/
OpenGL
sudo apt install libopengl0
boost(>= 1.65.1)
sudo apt install libboost-all-dev
Python 3.8
sudo apt install python3.8-dev
其他组件和包,主要是pip,numpy、scipy和pybind11(这个最好也装上,后面可能有用):
sudo apt-get install python3-distutils \ && curl -L https://bootstrap.pypa.io/pip/get-pip.py --output /tmp/get-pip3.py \ && python3.8 /tmp/get-pip3.py \ && python3.8 -m pip install --upgrade pip \ && python3.8 -m pip install numpy scipy pybind11
其他插件
这里我没有装,要用的时候再装也是可以的:
构建SOFA
官网建议如下建立目录,
sofa/
├── build/
│ ├── master/
│ └── v23.06/
└── src/└── < SOFA sources here >
选择一个位置,在终端输入。
mkdir sofa
cd sofa
mkdir build
mkdir src
cd ..
然后克隆SOFA的23.06的版本:
git clone -b v23.06 https://github.com/sofa-framework/sofa.git sofa/src
使用cmake生成Makefile
在使用cmake前最好检查一下自己的Ubuntu有没有安装stdc++(这是clang++使用的),如果使用的是gcc编译器,应该检查有没有g++。没有可能会报错:
我这里安装的是stdc++:
sudo apt-get install libstdc++-11-dev
- 切换路径到sofa/build下面
cd sofa/build
cmake-gui ../src
-
如果安装了 Ninja,选择“CodeBlocks – Ninja”。否则,选择“CodeBlocks – Unix Makefile”。我这里选择前者。
-
选择“Specify native compilers” ,然后点 “Next”,设置C编译器和C++编译器
Set the C compiler to /usr/bin/gcc
or /usr/bin/clang
Set the C++ compiler to /usr/bin/g++
or /usr/bin/clang++
这里的文件名具体到usr目录下看一下,像我这里选的是/usr/bin/clang-12
和/usr/bin/clang++-12
-
点击configure
-
有什么报错就检查报错的来源修复就行了,一般是没找到依赖的路径,添加进去就行了。可以看看视频的操作:How to build SOFA on Linux (xubuntu18.04)
-
(可选)自定义SOFA 通过CMake变量:
- 可修改
CMAKE_BUILD_TYPE
为“Release” 或 “RelWithDebInfo” (recommended) 或 “Debug” - 激活或不激活插件: PLUGIN_XXX,打勾与不打勾
- 激活或不激活功能: SOFA_XXX,打勾与不打勾
- 没有问题了就点击generate
- 退出cmake-gui,然后再build目录下输入:
ninja
就开始编译了,这里应该是没有什么错误的。
我自己装了一些插件,印象中有两个错误:
- 某文件的某行override删去(没有覆盖的虚函数)
- 某文件调用函数名wblock改成wbloc,不太记得了QAQ.(源代码还有bug,emmm)
如果一切正常,你在build目录下的终端应该输入:
./bin/runSofa
可以看到蛇的画面
至此安装就完成了
(可选)安装
另外可以进行安装,把所有编译好的文件放在一个文件夹里。我这里在build目录下建立一个install的文件夹:
mkdir install
然后在build目录下打开终端输入
cmake -DCMAKE_INSTALL_PREFIX=/home/lsy/sofa/build/install ../src
ninja install
然后你就能在install文件下找到你安装的文件。
加入插件
cmake-gui里已有的插件
需要先进行编译为.so文件,然后才可以添加。
首先在SOFA里是集成了一些插件的,可以直接从github仓库fetch,在build目录下打开终端,输入:
cmake-gui ../src
比如我要安装SofaPython3,找到SOFA_FETCH_SOFAPYTHON3这个变量打勾(我这里的图片就不展示打勾了)
然后就能看到出现了PLUGIN_SOFAPYTHON3的变量,打勾
点击configure,没有报错就generate,然后关闭cmake-gui。在终端输入ninja
重新编译。
cmake-gui里没有的插件
如果需要安装cmake-gui里没有的插件,比如STLIB这个插件,就需要自己在cmake里添加了,参见官网说明:Build a plugin
另外油管还有个视频演示了怎么加入插件:Compile external plugins with SOFA on Linux (xubuntu18.04)
官网建议按下面的目录格式创建文件夹管理插件
ext_plugin_repo/
├── plugin1/
├── plugin2/
└── ...
在sofa的目录下输入:
mkdir ext_plugin_repo
cd ext_plugin_repo
我这里选择的是in-tree的编译,在ext_plugin_repo目录下新建一个CMakeLists.txt
touch CMakeLists.txt
然后在这个目录下克隆仓库,比如
git clone https://github.com/SofaDefrost/STLIB.git
在CMakeLists.txt按照下面的格式书写:
cmake_minimum_required(VERSION 2.8.12)find_package(SofaFramework)sofa_add_subdirectory(plugin path_to_plugin1/ name_of_project_plugin1)
sofa_add_subdirectory(plugin path_to_plugin2/ name_of_project_plugin2)
添加几个插件sofa_add_subdirectory
就几行,比如我这里写的是:
cmake_minimum_required(VERSION 2.8.12)find_package(SofaFramework)sofa_add_subdirectory(plugin STLIB/ STLIB VERSION 3.0)
sofa_add_subdirectory
里第一个参数固定写plugin,第二个参数写这个插件的路径(这里使用的是相对路径:STLIB/
),第三个参数是这个插件里CMakeLists的项目的名字STLIB VERSION 3.0
:
在之前的cmake-gui里加入SOFA_EXTERNAL_DIRECTORIES
关键字,填入插件放置的路径:
接下来重复cmake-gui里已有的插件的步骤,除了fetch仓库不用做其他都是一样的。
另外还有插件安装视频的说明:
使用插件,在sofa的gui里打开Plugin Manager
添加对应的.so文件就好了,点击Add寻找(比如这里是libSTLIB.so)。
另外可以设置一下PATH和PYTHONPATH:
我这里的设置是r:
export PATH=/path/to/runSofa:$PATH
export PYTHONPATH=/path/to/SofaPython3:$PYTHONPATH
我这里设置的PYTHONPATH如下所示(安装了STLIB、SofaPython3、SoftRobots的插件),其中packages:/home/lsy/sofa/build/install/plugins/STLIB/lib/python3/site-packages:/home/lsy/sofa/build/install/plugins/SofaPython3/lib/python3/site-packages:/home/lsy/sofa/build/install/plugins/SoftRobots/lib/python3/site-packages
是新加入的。
/opt/ros/noetic/lib/python3/dist-packages:/home/lsy/sofa/build/install/plugins/STLIB/lib/python3/site-packages:/home/lsy/sofa/build/install/plugins/SofaPython3/lib/python3/site-packages:/home/lsy/sofa/build/install/plugins/SoftRobots/lib/python3/site-packages
以及PATH如下所示,其中/home/lsy/sofa/build/bin
是新加入的runSofa的路径:
/opt/ros/noetic/bin:/home/lsy/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/lsy/sofa/build/bin
在命令行输入runSofa
直接就能弹出小蛇的界面了。
runSofa
运行python文件**.py
(需要安装一下SofaPython3插件):
runSofa **.py
完活!
相关文章:

Linux上编译和安装SOFA23.06
前言 你可以直接使用编译安装好的SOFA版本Installing from all-included binaries (v23.06.00): 如果你想自己编译,可以看我下面写的内容,不过绝大多数是从官网来的,如果和官网有出入,建议还是以官网为准。 在Linux下…...

定时任务 Spring Task
一、介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 定位: 定时任务框架 作用: 定时自动执行某段Java代码 二、cron 表达式 cron表达式在线生成器:https://cron.qqe2.com/ 1、说明…...

golang 上传图片 --chatGPT
问:makeImgUpload(path string) 实现发送发送图片, 发送类型为 multipart/form-data gpt: 下面是一个简单的 makeImgUpload 函数的实现,用于发送图片并以 multipart/form-data 格式进行上传。请注意,此代码假设图片文件路径是正确…...

Android Studio 写一个Java调用c++ 的demo
前提条件: 本地已经配置好了ndk环境,如果没有配置好,建议参考macos 配置ndk环境-CSDN博客 这篇链接。 新建一个Empty Project 比如我这里的Project的名字是HelloJNI,包名是com.example.hellojni 然后在src目录下,右键选择Add C …...

Pandas数据操作_Python数据分析与可视化
Pandas数据操作 排序操作对索引进行排序按行排序按值排序 删除操作算数运算去重duplicated()drop_duplicates() 数据重塑层次化索引索引方式内层选取数据重塑 排序操作 对索引进行排序 Series 用 sort_index() 按索引排序,sort_values() 按值排序; Dat…...

【Debug】查询的数据量比数据库中的数据量还要多
今天前端反馈了一个bug,某个接口返回的数据很多,我到mysql数据库看了一下,查询的表名为trs_risk,其中只有1000多条数据,而页面返回有5000多条数据!! 匪夷所思啊,我定位到Mapper层的…...

nodejs微信小程序-慢性胃炎健康管理系统的设计与实现-安卓-python-PHP-计算机毕业设计
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...

二十一、数组(1)
本章概要 数组特性 用于显示数组的实用程序 一等对象返回数组 简单来看,数组需要你去创建和初始化,你可以通过下标对数组元素进行访问,数组的大小不会改变。大多数时候你只需要知道这些,但有时候你必须在数组上进行更复杂的操作…...

react hook 获取setState的新值
利用useRef 存储最新值 let [count,setCount] useState(0)let countRef useRef(count)let handleClick function (){setCount((prev)>{countRef.current prev1return countRef.current})console.info(countRef.current)}利用useRef let [count,setCount] useState(0)le…...

JVM判断对象是否存活之引用计数法、可达性分析
目录 前言 引用计数法 概念 优点 缺点 可达性分析 概念 缺点: 扩展: 1.GC Roots 概念 2.STW (Stop the world) 前言 JVM有两种算法来判断对象是否存活,分别是引用计数法和可达性分析算法,针对可达性分析算法STW时间长、…...

报道 | 2023年12月-2024年2月国际运筹优化会议汇总
2023年12月-2024年2月召开会议汇总: The 16th Annual International Conference on Combinatorial Optimization and Applications (COCOA 2023) Location: Virtual Important dates: Conference: December 11, 2023 (Start) - December 13, 2023 (End) Details…...

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷C
单选题 1、A right triangle has a side that is 5cm long, and its hypotenuse is 13cm long.The area of the triangle is (). A、30 cm2 B、60 cm2 C、65 cm2 D、32.5 cm2 答案:A 2、一位旅客安检后走在前往登机口的路上。路途中一部…...

“升级图片管理,优化工作流程——轻松将JPG转为PNG“
在图片时代,无论是工作还是生活,图片管理都显得尤为重要。批量处理图片,将JPG格式轻松转换为PNG格式,能够使您的图片管理更优化,提高工作效率。 首先,我们进入首助编辑高手主页面,会看到有多种…...

基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍: 采用…...

助力水泥基建裂痕自动化巡检,基于yolov5融合ASPP开发构建多尺度融合目标检测识别系统
道路场景下的自动化智能巡检、洞体场景下的壁体类建筑缺陷自动检测识别等等已经在现实生活中不断地落地应用了,在我们之前的很多博文中也已经有过很多相关的实践项目经历了,本文的核心目的是想要融合多尺度感受野技术到yolov5模型中以期在较低参数量的情…...

rk3588使用vscode远程debug 配置文件
进入调试口,需要本地和远程都装C/C estension 下面是在调mpi_enc_test的launch.json 文件自己make生成的 makefile 没改过 args项是输入参数,配置了相机输入,具体参数看他的demo说明, 记录一下,方便以后拷贝方便 {// …...

隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态
2023年11月 NearCon2023 活动期间,基于 Cosmos SDK 构建的隐私协议 Secret Network,宣布使用 Octopus Network 开发的 NEAR-IBC,于2024年第一季度实现 Secret Network 与 NEAR Protocol 之间的跨链交互。 这将会是Cosmos 生态与 NEAR 之间的首…...

Milvus Standalone安装
使用Docker Compose安装 Milvus standalone(即单机版),进行一个快速milvus的体验。 前提条件: 1.系统可以使用centos 2.系统已经安装docker和docker-compose 3.milvus版本这里选择2.3.1 由于milvus依赖etcd和minio,…...

二分查找算法合集
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 时间复杂度 O(logn) 自己写二分算法 左闭右开 左开右闭C算法&a…...

SELinux零知识学习十八、SELinux策略语言之类型强制(3)
接前一篇文章:SELinux零知识学习十七、SELinux策略语言之类型强制(2) 二、SELinux策略语言之类型强制 2. 类型、属性和别名 (3)关联类型和属性 1)使用type语句关联类型和属性 迄今为止,我们…...

人工智能引领环境保护的新浪潮:技术应用及其影响
在全球范围内,环境保护已经成为一个迫切的话题。随着人工智能技术的发展,它开始在环境保护领域扮演越来越重要的角色。AI不仅能够帮助更有效地监测环境变化,还能提出解决方案来应对环境问题。 污染监测与控制: AI系统可以分析来自…...

第三十四节——组合式API使用路由
<template> <div><div>我是第一个页面</div><button click"link2">跳转到第二个页面</button></div> </template> <script setup>// 从vue-router引入 useRouter这个钩子import { useRouter } from vue-route…...

文件隐藏 [极客大挑战 2019]Secret File1
打开题目 查看源代码发现有一个可疑的php 访问一下看看 点一下secret 得到如下页面 响应时间太短我们根本看不清什么东西,那我们尝试bp抓包一下看看 提示有个secr3t.php 访问一下 得到 我们看见了flag.php 访问一下可是什么都没有 那我们就进行代码审计 $file$_…...

Linux CentOS 8(MariaDB的数据类型)
Linux CentOS 8(MariaDB的数据类型) 目录 一、项目描述二、相关知识三、项目分析3.1 数据类型的分类3.2 数据类型属性 一、项目描述 Jan16公司为满足部门之间数据共享、减少数据冗余度和保持数据独立性等要求,需要对数据库中的数据类型拥有一…...

云端援手:智能枢纽应对数字资产挑战 ——华为云11.11应用集成管理与创新专区优惠限时购
现新客3.96元起,下单有机会抽HUAWEI P60 Art 福利仅限双十一 机会唾手可得,立即行动! 「有效管理保护应用与数据的同时实现高效互通」——华为云全力满足企业需求,推出全套「应用集成管理与创新」智能解决方案:华为云…...

Azure的AI使用-(语言检测、图像分析、图像文本识别)
1.语言检测 安装包: # 语言检测 %pip install azure-ai-textanalytics5.2.0 需要用到密钥和资源的终结点,所以去Azure上创建资源,我这个是创建好的了然后点击密钥和终结者去拿到key和终结点 两个密钥选择哪个都行 语言检测代码示例&#…...

QDateEdit开发详解
文章目录 一、创建 `QDateEdit` 对象二、设置日期范围三、设置当前日期四、获取选择的日期五、显示日历弹出窗口六、信号与槽七、格式化日期显示1. `QDateTime` 类2. 日期时间格式化字符串3. 自定义格式化字符串4. 本地化日期格式5. `QDate` 和 `QTime` 的格式化6. 时间戳转日期…...

3.6 Windows驱动开发:内核进程汇编与反汇编
在笔者上一篇文章《内核MDL读写进程内存》简单介绍了如何通过MDL映射的方式实现进程读写操作,本章将通过如上案例实现远程进程反汇编功能,此类功能也是ARK工具中最常见的功能之一,通常此类功能的实现分为两部分,内核部分只负责读写…...

zsh和ohmyzsh安装指南+插件推荐
文章目录 1. 安装指南2. 插件配置指南3. 参考信息 1. 安装指南 1. 安装 zsh sudo apt install zsh2. 安装 Oh My Zsh 国内访问GitHub sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"这将安装 Oh My Zsh 和所…...

VS中修改解决方案名称和项目名称
如何修改visual studio2019中的项目名 - 知乎 (zhihu.com) 查了很多,还是这个可行。虽然文中说不是最简单的,但在所查找资料中是可行且最简单的。 要点主要是: 1、比如我们复制一个解决方案,最好是带代码哈,也就是添…...