OTB遥感图像跨平台移植项目
最近在做项目移植工作,对linux不熟,接下来讲一讲我遇到的问题,以及解决方法。
一、环境
VMware-workstation-full-16.0.0-16894299 +ubuntu-18.04.5-desktop-amd64+g++7.5.0
下载路径:https://download.csdn.net/download/qq_40828839/13761853
ubuntu18.04太大无法上传,有需要请留邮箱号
自己编译的控件:opencv4.4.0+contrib,Qwt6.1.4,gdal3.1.2,我当时是下载源码,自己在ubuntu上编译,自己根据需要下载编译,这个不难。
二、遇到的问题
1、g++编译器解析较严格,在qtcreator下编译代码是出现**c++11错误,网上搜索问题解决办法,最后面解决了问题,具体是在项目.pro下加入:DEFINES += _GLIBCXX_USE_CXX11_ABI=0
2、我们是在OTB的基础上二次开发,将otb中的函数封装到.so,直接调用动态库中的函数,编译自己的动态库遇到的问题都可以在网上找到相应的解决方案,像什么在.pro文件中添加otb的依赖库什么的,与window下无异,万一遇到自己的.so库编译异常,主要原因还是依赖库没添加好,你可以在/usr/etc/ld.so.conf文件中添加自己的依赖库路径,然后让这个配置生效,命令:sudo ldconfig。
3、说说生成.so动态库之后的事,这个.so库的生成还依赖了OTB中大量的库,之前是没有遇到过这种情况的,这项动态库的调用与windows下有很大区别,windows下你只需将这项依赖库都放在.exe文件同级目录就可以,运行时会自动在这个目录下搜索,但是ubuntu就不是这样。要么自己将.so放入系统路径(/usr/lib /usr/local/lib),要么自己依赖库路径添加到配置环境中,也就是2、提到的方式。
4、查找.so依赖库,我们自己软件系统,希望能用上给予OTB的动态库,尝试了多种方式,主要还是依赖库的原因,尝试了多种方式,通过qtcreator debug模式打印出错原因:export QT_DEBUG_PLUGINS=1
我这里报了一个 qt.qpa.plugin: Could not find the Qt platform plugin “xcb” in “/opt/Qt-5.12.4/plugins” 错误,我就是通过这个命令找出来的,感谢各位博主们。
5、最后大招,我在qt上编译.so库没有异常,通过QLibray动态调用里面的函数,load()函数失败,找原因找了很久,后面把里面的函数写在类中,发现有输入有输出,函数没有问题,思来想去想到了一个办法,我编译项目是不是添加了一些外部库吗?后面我将编译的.so文件当中外部库添加到.pro中,功夫不负有心人,编译的时候报错了,哈哈,感觉有希望,修复了bug,可以静态调用,好,我再试试QLibray 动态调用。返回值为true。大功告成!!!
附:编译其它依赖库自己根据需要编译,有什么欢迎留言!!!