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
  1. 切换路径到sofa/build下面
cd sofa/build
cmake-gui ../src

在这里插入图片描述

  1. 如果安装了 Ninja,选择“CodeBlocks – Ninja”。否则,选择“CodeBlocks – Unix Makefile”。我这里选择前者。

  2. 选择“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

在这里插入图片描述

  1. 点击configure
    在这里插入图片描述

  2. 有什么报错就检查报错的来源修复就行了,一般是没找到依赖的路径,添加进去就行了。可以看看视频的操作:How to build SOFA on Linux (xubuntu18.04)

  3. (可选)自定义SOFA 通过CMake变量:

  • 可修改CMAKE_BUILD_TYPE 为“Release” 或 “RelWithDebInfo” (recommended) 或 “Debug”
  • 激活或不激活插件: PLUGIN_XXX,打勾与不打勾
  • 激活或不激活功能: SOFA_XXX,打勾与不打勾
  1. 没有问题了就点击generate
  2. 退出cmake-gui,然后再build目录下输入:
ninja

就开始编译了,这里应该是没有什么错误的。

我自己装了一些插件,印象中有两个错误:

  1. 某文件的某行override删去(没有覆盖的虚函数)
  2. 某文件调用函数名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

完活!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/190957.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多维时序 | MATLAB实现PSO-BiGRU-Attention粒子群优化双向门控循环单元融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-BiGRU-Attention粒子群优化双向门控循环单元融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-BiGRU-Attention粒子群优化双向门控循环单元融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 …

springBoot 配置druid多数据源 MySQL+SQLSERVER

1:pom 文件引入数据 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.0</version> </dependency>…

深入理解Linux网络笔记(六):深度理解TCP连接建立过程

本文为《深入理解Linux网络》学习笔记&#xff0c;使用的Linux源码版本是3.10&#xff0c;网卡驱动默认采用的都是Intel的igb网卡驱动 Linux源码在线阅读&#xff1a;https://elixir.bootlin.com/linux/v3.10/source 5、深度理解TCP连接建立过程 1&#xff09;、深入理解liste…

【算法基础】筛质数

文章目录 问题描述解决方法朴素筛法线性筛法 问题描述 给定一个正整数 n n n&#xff0c;请你求出 1 ∼ n 1∼n 1∼n 中质数的个数。 输入格式 共一行&#xff0c;包含整数 n。 输出格式 共一行&#xff0c;包含一个整数&#xff0c;表示 1∼n 中质数的个数。 数据范围 …

代码随想录二刷 | 数组 | 数组理论基础

代码随想录二刷 &#xff5c; 数组 &#xff5c; 数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合。可以通过下标索引的方式获取到下标对应的数据。 数组的下标都是从0开始的 数组内存空间的地址是连续的 因为数组的在内存空间的地址是连续的&#xff0c;所以我们…

如何去开发一个springboot starter

如何去开发一个springboot starter 我们在平时用 Java 开发的时候&#xff0c;在 pom.xml 文件中引入一个依赖就可以很方便的使用了&#xff0c;但是你们知道这是如何实现的吗。 现在我们就来解决这一个问题&#xff01; 创建 SpringBoot 项目 首先我们要做的就是把你想要给别…

23年宁波职教中心CTF竞赛-决赛

Web 拳拳组合 进去页面之后查看源码&#xff0c;发现一段注释&#xff0c;写着小明喜欢10的幂次方&#xff0c;那就是10、100、1000、10000 返回页面&#xff0c;在点击红色叉叉的时候抓包&#xff0c;修改count的值为10、100、1000、10000 然后分别获得以下信息 ?count1…

Idea安装完成配置

目录&#xff1a; 环境配置Java配置Maven配置Git配置 基础设置编码级设置File Header自动生成序列化编号配置 插件安装MyBtisPlusRestfulTooklkit-fix 环境配置 Java配置 Idea右上方&#xff0c;找到Project Settings. 有些版本直接有&#xff0c;有些是在设置下的二级菜单下…

Linux--初识和几个简单的指令(1)

目录 前言 0.什么是操作系统 0.1 搭建 Linux 环境 0.2搭建 Linux 环境小结 1.使用 XShell 远程登录 Linux 1.1关于 Linux 桌面 1.2下载安装 XShell 1.3查看 Linux 主机 ip 1.4XShell 下的复制粘贴 2.Linux下基本指令 2.1 pwd命令 2.2 ls命令 2.3 mkdir指令 2.4 cd…

IJ中配置TortoiseSVN插件:

文章目录 一、报错情况&#xff1a;二、配置TortoiseSVN插件&#xff1a; 一、报错情况&#xff1a; 由于公司电脑加密&#xff0c;TortoiseSVN菜单没有提交和更新按钮&#xff0c;所以需要使用IJ的SVN进行代码相关操作 二、配置TortoiseSVN插件&#xff1a; 需要设置一个svn.…

组件插槽,生命周期,轮播图组件的封装,自定义指令的封装等详解以及axios的卖座案例

3.组件插槽 3-1组件插槽 注意 插槽内容可以访问到父组件的数据作用域,因为插槽内容本身就是在父组件模版中定义的 插槽内容无法访问子组件的数据.vue模版中的表达式只能访问其定义时所处的作用域,这和JavaScript的词法作用域是一致的,换言之: 父组件模版的表达式只能访问父组…

【Vue渲染】 条件渲染 | v-if | v-show | 列表渲染 | v-for

目录 前言 v-if和v-show的区别和联系 v-show和v-if如何选择 条件渲染|v-if|v-show v-if v-if v-else v-if v-else-if v-else template v-show 列表渲染|v-for v-for 前言 本文介绍Vue渲染&#xff0c;包含条件渲染v-if和v-show的区别和联系以及列表渲染v-for v-if和…