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语句关联类型和属性 迄今为止,我们…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...