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