SOFA——C++项目“hello world”

   既安装SOFA后,发现在F:\SOFA_v19.12\source\examples有它自带的已经编译的例子,但其中并没有C++项目,也不包含源码(个人认为是XML写的),运行就是直接在runSofa.exe那个界面点打开那些.scn项目即可,你可以用Qt打开这些.scn项目,发现就是一堆XML代码了。那条蛇就是默认打开的caduceus.scn项目。
在这里插入图片描述
   在F:\SOFA_v19.12\source\applications\tutorials这个目录下有几个C++项目的源码,如ChainHybrid、 oneParticle等。
  那么问题来了,明明一个以C++为根基的库,怎么从C++变到runSofa所出现的那个界面呢(RunSofa.exe这个东西是有C++源码的在:F:\SOFA_v19.12\source\applications\projects\runSofa,如果你以后用C++写,那么这个东西将是你除上面tutorials中那几个C++小项目外唯一的参考了)
  本文“hello world”所用的是ChainHybrid项目:原因有两个,第一个是这个项目在F:\SOFA_v19.12\source\examples\Demos\ChainHybrid.scn 中有这个scn项目,第二是其他项目我也试了,都已失败告终(在他论坛找到一些声音说有几个项目其实本来就有bug而且SOFA库在更新,这几个项目好像并没跟着改)。
最终生成ChainHybrid.exe,效果:
在这里插入图片描述官方ChainHybrid.scn 效果:
在这里插入图片描述从C++代码到上见运行效果流程就三步:

Cmake编译—VS生成—运行。

  解决这三步中遇到的“大部分”致命错误就能行了。下面就我生成这个项目过程中所遇到的问题进行说明,大部分没有错误截图了,反正不同项目遇到的问题估计也是千奇百怪。

一、Cmake编译

1.1 Cmake—Configure

1.1.1 找不到GLEW

在这里插入图片描述

  • 解决:如图添加GLEW_INCLUDE_DIR目录

1.1.2 找不到Qt

在这里插入图片描述

  • 解决:如图添加CAMKE_PREFIX_PATH Qt目录

1.1.3 找不到如NewmatTargets.cmake这类target cmake文件

注:从这里开始大量用到磁盘文件搜索,请提前准备如 Everything 之类的Windows文件搜索工具

  • 解决:搜索找到目标 .cmake 文件,复制粘贴到F:\SOFA_v19.12\build\cmake目录下

1.2 Cmake—Generate

1.2.1 INTERFACE_INCLUDE_DIRECTORIES问题

generate阶段会报错1.1.3小节中复制过去的 cmake 文件中INCLUDE_DIRECTORIES这个路径找不到所需头文件

  • 解决:用Notepad++打开这些cmake 文件,找到这里(注意一个cmake文件中不止一处)
    在这里插入图片描述
    更改为:
    在这里插入图片描述其实就是将相对路径更改为绝对路径,那怎么知道这个绝对路径在哪:
    他需要的是相关.h 头文件,直接去搜索这个头文件在哪, 如上面这个头文件名就是SceneCreator.h找到目录 替换
    大部分其实可以根据父目录快速定位:如
    原始:
    在这里插入图片描述更改:
    在这里插入图片描述

二、VS生成

2.1 直接无法打开头文件

原因在于没有包含头文件所在目录,去这里添加
在这里插入图片描述
发现越添加错误越多?我添加着添加着报错四五千了, 原因在于这些头文件是找到了,但是头文件中也include了大量了其他头文件,所以报错越来越多

  • 解决:打开F:\SOFA_v19.12\build\applications\projects\runSofa\runSofa.sln直接去把这个工程所包含的头文件路径复制过来(这肯定不是正道方法,有同志知道怎么解决这个头文件路径问题请求赐教)

2.2 LNK_118错误

如图报错打不开 什么什么文件
在这里插入图片描述原因:lib或dll文件没找到

  • 解决:添加lib所在

报该错误时,这个地方绿框可能不是.lib 是sceneCreator NOTFOUND其他同理
第一步:进去把这些都改成 xxx.lib
ps:为什么是 lib 不是 dll 呢,因为我改成dll没解决问题
在这里插入图片描述第二步:
添加这些lib所在的目录
在这里插入图片描述

2.3 LNK_2019错误

无法解析外部符号,原因调用了某些函数但是没包含这些函数对应的库(好像是,有点忘了)
在这里插入图片描述
-解决:根据错误提示找是缺了哪个lib, 如上图这个报错可以看出这个错误大致发生在调用sofa::simulation:: 什么什么的时候发生错误, 所以去找
在这里插入图片描述
通配符使用后找到相关lib 然后按照 2.2 小节方法添加解决

PS:还有另一个情况可能引发LNK_2019这个问题 ,既平台:
在这里插入图片描述可以试一下把这个32改成64 或反过来,反正哪个能不报错用哪个呗,可以看到我是编译的64位Relase版本,但是红框这里需要是win32, 改写成64会报错2019,这我不清楚了

三、ChainHybrid.exe运行

生成的exe文件在C:\Users\pc\Desktop\chainHyb\build\Release

3.1 找不到 dll

  • 解决:去找到这个dll文件 复制到 relese 这个目录下
  • 其实都在F:\SOFA_v19.12\build\bin\Release这里,既RunSofa.exe所在目录下
  • 建议直接复制所有该目录下所有dll文件过去,因为真的很多很多(泪目 😤)

3.2 找不到qt环境

报错:last Used GUI.ini not found: SOFA qt.qpa.plugin: could not find the qt platform pugin windows in "

  • 解决:去把F:\SOFA_v19.12\build\bin\Release这个目录下的 platforms这个文件夹复制到 Relese目录下
    然后就可以打开窗口了

3.3 少插件

如图报错,可以看出需要SofaOpenglVisual这个插件
在这里插入图片描述

  • 解决:回到VS 打开源码添加后重新生成
    在这里插入图片描述

3.4 mesh或obj路径找不到文件

  • 解决:去源码找到添加mesh obj 的地方,相对路径改绝对路径
    在这里插入图片描述

3.5 找不到背景图,图标

在这里插入图片描述

  • 解决:找到再写图标或贴图,在Release目录下创建 icons textures config 这些目录放进去就不报错了

在这里插入图片描述

  • icon图标是帮助那里的前进 主界面
    在这里插入图片描述
  • textures是运行背景图,我现在不报错 但是有warring显示不出,原因不详(见下图,并没有SOFA字样背景,对比文章开头 ChainHybrid.scn运行效果)
    在这里插入图片描述

四、其他

  如我前面所说,解决致命错误就能行了,现在运行仍然有报错,有warring,但已经不影响演示效果了, 包括在VS生成阶段,即使不报错正确生成 也是有将近一千个warring的。
最后一个warring就是没能显示背景图的问题,我也去看了相关源码,但是不知道它为啥没正确收到图片,报这个warring的原因是图片为空 即 if(! image) warring
在这里插入图片描述  最后附上一张开始运行后的形变效果瞬间截图
在这里插入图片描述

五、感慨

一句话:难走的路,从不拥挤
一张图:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章