OSG MINGW 编译之路

入职三年有余,主要负责Qt桌面应用程序开发,偶尔写写OSG与Qt之间数据通信,兴致所致,开启OSG编译之旅。
第一阶段:拿过同事的的源码,参考网上的编译教程,历经种种试错,终于编译成功。开始了OSG程序的学习之路,了解了OSG项目构建文件cmakeList的结构,知道了一些cmake语法,未对cmake进入深入的学习,便开始OSG程序的学习,完成Qt与OSG之间的数据传递,修改osgQt中源码,增加Qt界面对手势的识别,在OSG书籍的帮助下,修改osg ive dll 增加自定义文件格式等等
第二阶段:近日升级Qt版本,主要是Qt4 不支持XLSX 的读写,顺道也升级了一下osg的版本,问题出现了,不支持两个版本同时存在(很明显,计算机仍然无法智能的识别我要调用哪个dll),所以想到给dll改名字,像Qt4、Qt5一样区分出来,我的天 mingw下居然没有借口,无法在cmake-gui 上直接完成,求助网络无果,看到大家都是在MSVC上实现的,根据QQ群友的提示(10元红包),发现了MSVC带版本号的秘密。一开始以为是一件很简单的事情,实际上也是很简单的。我再提示下,在osg源码工程中的CmakeModules 下 OsgMacroUtils.cmake 文件中随机改动,一天下来,无果,还是没有成功,期间想过放弃,再次求助,用VS编译了解其流程。最终再一次耐心的读源码,在OsgMacroUtils.cmake中 macro 宏到底是什么意思,干什么用的,百度了一下,发现其功能与函数相似,不觉中兴致再起,一个宏一个宏的看,看了三四个,大概了解宏的作用,阅读每一个宏前面的提示,搜索过DLL,与其相关的着重在看,终于在整个项目下搜索 宏HANDLE_MSVC_DLL 在同目录下的ModuleInstall 中出现了其应用,豁然开朗,更具其内容自己写了一个macro HANDLE_MINGW_DLL ,在ModuleInstall.cmake 对应的位置加上,再次编译。期间,在VS编译的时候就发现Openthreads 的dll命名与其他的不同,当发现生成的又是libopenthreads.dll 的时候没有结束运行,我潜意识里认为自己有可能会成功,果然等到osg.dll 的时候版本标识加上了,发现.lib文件没有生成到对应目录,把以前的lib拷贝过来,不能用,继续查看,cmake osg源码,再次编译,当编译到osgUtil.dll 的时候还是没有发现.lib 的生成,工程中大概找了一下,没有发现(自己没有仔细找),再看源码,觉得没有问题,搜索了一下,发现其是存在的,等编译结束,想到以前编译xlsx的时候 用过mingw32-make install 尝试了一下,效果出来,竟然拷贝所有相关的那C对应目录下,哈哈,尝试多版本,结果还是异常,期间有程序问题,但是当libopenthread提示错误的时候,我知道又得编译一遍了,因为在搜索OSG_MSVC_VESIONED_DLL 这个变量的时候我见过VS下openthreads.dll 的前缀,继续修改,openthread 下qt 下的cmakelist文件,这个就水到渠成了,再次编译,调试,成功。至此,三天的时间就这样过去了。至于后面整理文件路径,编译更多的版本那没事的时候 编译一下,放松一下,顺道将修改的源码完善一下,与模板看齐。

猜你喜欢

转载自blog.csdn.net/u014038245/article/details/77333948