Vegamap移植小结

来源:互联网 发布:深圳网络维护 编辑:程序博客网 时间:2024/05/21 18:40

Windowsà linux

源代码在VS环境下编写的,插件提供了create basic .pro File…的功能,可以直接使用此功能,但是生成的pro文件还有一些问题。

VS创建好的pro文件文件还需要一点修改,比如将lgdal改成lgdal_i,然后LIBS,INCLUDEPATH做一点修改。Pro文件本身比较明了,改动起来倒不是很费事。

Linux下使用QtCreator来打修改过的Pro文件,然后编译。但程序正如预料一般——编译失败。

最先我能找到的原因是linuxWingw编译器更加严格,某些代码在VS下能编译通过,但WinGw就会报错。

比如在类LayerManagerDock.cpp下原来我写的定义是:

LayerManagerDock(QString &title, QWidget *const parent = 0);

vmapapp.cpp中创建其实例写的是:mlayerManagerDock = new LayerManagerDock(tr("图层管理"), this);linux下报错“找不到合适的构造函数”。但至此还是无法编译成功。

但是接着报错是找不到-lglu,初步判定应该是opengl没有装。查看新立得,发现系统安装了freeglut3,但是freeglut3-dev还没有装,安装了freeglut3-dev,总算编译成功了。

运行程序,可以弹出主界面。但是加载shapefile后程序直接退出。经过排除,我发现是其中一个函数有一个路径没有返回值,在linux下直接死循环了!

修改以后,此时多数功能可以正常运行,但是我发现windows平台下实现的拖动选择框,在linux下就无效了。

关于QtCreator,我不得不说的是调试不够方便,而且存在乱码问题,在Encoding选项中我居然找不到utf-8

于是想用Eclipse,这样应该方便调试,但是打开了工程后,问题又来了。——加载pro文件后,如果pro文件最后引入的pri文件,不会被加载进工程!

Linuxàwindows

主要的步骤有两个:

1.        .pro文件中的gdal改成gdal_i

2.        打开VS2008,打开Qt->import .pro file;

然而此时直接编译工程会出现错误。

比如definition of dllimport static data member not allowed或者类似的错误。

这个错误比较诡异。比如工程vmapcore中查看预编译头定义中确实有VMAPCORE_LIBRARY,此时我将vmapcore_global.h中的#if defined(VMAPCORE_LIBRARY) 试着改成1,然后重新编译成功,这时再将1改回来VS这次居然不报错了,真是神奇=_=

编译GUI工程时也出现类似错误,查看发现预编译头定义居然少了GUI_LIB,加上去后重新编译,成功了。这次VS报错比较正常,解释就是从pro文件转到vs文件中,定义丢失了!

小结

当从pro文件直接导入到VS中,某些配置比如生成路径以及输出路径没有被保存,还有一些头文件目前也没法保存。

VS导出的pro文件,要在linux下使用,除了程序本身的编译问题外,用QtCreator还是相对比较容易的。