分享
 
 
 

vtkdesigner终于编译成功

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

vtkdesigner是一款提供vtk的pipeline可视化编辑软件,有了它,就不需要自己再用程序去组合各种复杂的pipeline,而只需要拖动一下鼠标建立一个pipeline,并且设置一些参数,就可以立即观察到其效果了,vtkdesigner的下载页面是这里:http://vtkdesigner.sourceforge.net

从一开始接触到vtk开始,我就希望能够用vtkdesigner来帮助学习,但是它的使用却实在不怎么方便,官方网站上只有下载sourcecode,而没有预编译的版本,之前我在Redhat9和Redhat AS3上的编译全部以失败告终,具体编译时出现哪些错误信息现在已经记不得了。

后来尝试在Windows上编译,vtkdesigner虽然是使用vtk和qt进行开发的,但是官方网站上却没有说明其是否可以在Windows上进行编译,死马当活马医了。。。经过N番努力,编译初见成效,但是到最后关头,发现我使用的QT版本竟然不支持QGL(即QT对OpenGL的封装),所以还是以失败告终了,期间我也尝试过向Trolltech申请试用版的QT,可是他们竟然告诉我无法向我提供企业版,只能去下载不支持QGL的简化试用版,唉,可恨的Trolltech。

不管怎么样,还是把我在Windows下编译的过程记录一下吧:

1)准备QT,我使用的是QT企业版,版本为QT334,(可惜,其中没有QGL),将QT的bin目录加入系统Path,将QT的include,lib和bin路径分别加入VC的环境变量中。

2)安装CMake,从http://www.kitware.com有Windows下的安装版,下载后安装即可。

3)下载VTK,还是从http://www.kitware.com,我使用的是VTK4.2,用CMake生成VTK的VC工程dsw文件,使用的是ShareLibrary,Debug模式,进行编译,很顺利的编译完成了,将VTK/bin/debug目录加入系统的Path环境中。

4)下载vtkdesigner,我下载的版本是1.0.3,使用CMake生成其VC的工程文件,期间会提示QT_QT_LIBRARY变量没有定义,此时选则继续,然后选择“Show Advanced Values”,并将该变量设置为:"QT/lib/qt-mt334.lib"(即你使用的QT的lib文件)。

5)开始编译vtkdesigner,编译vtkCommon.dsp时出现link错误,此时打开Project Settings,在link library中加入“vtkRendering.lib vtkGraphics.lib vtkImaging.lib vtkIO.lib vtkFiltering.lib vtkCommon.lib vtkftg1.lib glu32.lib opengl32.lib vtkfreetype.lib vtkpng.lib vtktiff.lib vtkzlib.lib vtkjpeg.lib vtkexpat.lib”

6)继续编译,此时提示“C2733”错误,msdn上家是为“second C link of overloaded function 'function' not allowed”,疑为一个行数名称与Windows API行数同名了,修改CvtkExtraProperty.h,CvtkExtraProperty.cpp,CvtkObject.cpp,将其中的RegistClass()和UnregisterClass()名称改掉(如:后面加字符B)。

7)继续编译,vtkdCommon顺利编译通过,vtkdWrapper的Link时,提示无法找到vtkdCommon.lib文件安,回头查看vtkdCommon.dll,发现竟然没有export函数表,估计是export行数没有定义,导致编译器没有为其生成lib文件,修改vtkdCommon:

a)修改CCalculator.h:class __declspec(dllexport) CCalculator

b)修改CDlgPtr.h:class __declspec(dllexport) CDlgPtr : public QByteArray

c)修改CComplexProperty.h:

__declspec(dllexport) QString vtkLightCollectionToString(vtkLightCollection* col);

__declspec(dllexport) void stringToVtkLightCollection(vtkLightCollection* col, const QString &string);

__declspec(dllexport) QString vtkLightToString(vtkLight* light);

__declspec(dllexport) QString vtkPropertyToString(vtkProperty* prop);

__declspec(dllexport) vtkLight* stringToVtkLight(const QString &string);

__declspec(dllexport) vtkProperty* stringToVtkProperty(const QString &string);

__declspec(dllexport) void setField(QString &str, int field, const QString &data);

__declspec(dllexport) QString getField(const QString& str, int field);

__declspec(dllexport) QString pullChars(const QString &str, int length);

__declspec(dllexport) QByteArray byteArray(const QString str);

8)继续编译,vtkCommon.dll正确生成了,导出函数表这次也对了,编译到vtkdWrappers时,还是link错误:

???中...

?????? D:\vtkdesigner\build\bin\vtkd\Debug/vtkdWrappers.lib と???????? D:\vtkdesigner\build\bin\vtkd\Debug/vtkdWrappers.exp を作成中

CVtkRenderWindow.obj : error LNK2001: 外部????? ""public: void __thiscall CVtkQtRenderWindow::setFocusSignal(bool)" (?setFocusSignal@CVtkQtRenderWindow@@QAEX_N@Z)" は未解決です

CVtkRenderWindow.obj : error LNK2001: 外部????? ""public: static class CVtkQtRenderWindow * __cdecl CVtkQtRenderWindow::New(void)" (?New@CVtkQtRenderWindow@@SAPAV1@XZ)" は未解決です

CVtkRenderWindow.obj : error LNK2001: 外部????? ""public: void __thiscall CVtkQtRenderWindowInteractor::SetRenderWindow(class CVtkQtRenderWindow *)" (?SetRenderWindow@CVtkQtRenderWindowInteractor@@QAEXPAVCVtkQtRenderWindow@@@Z)" は未解決です

CVtkRenderWindow.obj : error LNK2001: 外部????? ""public: __thiscall CVtkQtRenderWindowInteractor::CVtkQtRenderWindowInteractor(void)" (??0CVtkQtRenderWindowInteractor@@QAE@XZ)" は未解決です

D:\vtkdesigner\build\bin\vtkd\Debug/vtkdWrappers.dll : fatal error LNK1120: 外部参照 4 が未解決です。

link.exe の実行???

发现是CVtkQtRenderWindow类没有实现导出,偷懒一点了,直接将CVtkQtRenderWindow.h,CVtkQtRenderWindow.cpp,CVtkQtRenderWindowInteractor.h,CVtkQtRenderWindowInteractor.cpp四个文件加入到vtkdWrapper的dsp中了,并且加上对moc的调用,让其生成moc_CVtkQtRenderWindow.h和moc_CVtkQtRenderWindowInteractor.h两个文件,并将这两个文件也加入工程,好了再编译,这次只出现了少量Link错误,是关于QGLWidget的,这是由于我使用的QT中没有QGL的部分,如果有QGL,相信这个步骤就可以顺利通过了。

呵呵,写了半天,将Windows平台上不成功的编译过程写出来了,实在是惭愧,昨天开始又尝试在Linux上编译vtkdesigner了,并且意外的总算成功了,当然过程中还是遇到了一点困难了,也把过程写出来:

1)我用的系统是Fedora Core 3,gcc版本是3.4.2(可能对于VTK4.2来说版本太高了,所以会有编译错误的)

2)先安装CMake,接着安装VTK,但是不幸,发生了编译错误,编译器指出VTK/IO/vtkBMPReader.cxx中有一个vtkBMPReaderUpdate2的模板函数,如下:

//----------------------------------------------------------------------------

// This function reads in one data of data.

// templated to handle different data types.

template <class OT>

void vtkBMPReaderUpdate2(vtkBMPReader *self, vtkImageData *data, OT *outPtr)

{

......

}

下面有几处调用的代码,如这样:

case VTK_DOUBLE:

vtkBMPReaderUpdate2(this, data, (double *)(outPtr));

break;

编译器提示了一堆奇怪的错误,我实在是没有看懂,总之是说函数的使用不正确,我没有能力修改这样的错误,所以只好把这几处调用的地方都屏蔽了。

相比之下,以前在Redhat9和Redhat AS3上编译VTK时都没有任何问题的,按理说gcc的重大改变是发生在4.0时的,那时候才出现了一些和旧代码的不兼容问题,而我用的还是旧的gcc啊,所以也实在搞不明白。

后来又发生了一个类似的编译错误,是在vtkImageReader.cxx中,也是这么一个模板函数:vtkTemplateMacro4(...),就索性又把它注释掉了。还好,后来就再也没有这样的错误了,怀疑这两处是同一个作者写的,风格竟然如此相似,还一起出错。。。郁闷

3)VTK顺利编译通过了,开始编译vtkdesigner了,我使用的是vtkdesigner1.0.3版,先将其解压缩在任意目录下,然后编辑该用户的.bashrc文件,加入以下内容:

export VTKD_HOME=/usr/local/lib/vtkd

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$VTKD_HOME:$VTKD_HOME/Plugins

export VTK_DIR=/usrt/share/VTK

4)使用cmake生成vtkdesigner的make文件,然后make,过程中发生了一个错误,发现问题是出在CPipelineElement.cpp中的这么一行:

QFont font(font());

没有看懂,就索性把它改了:

QFont font;

好编译通过了

5)make install

6)一切顺利,vtkdesigner竟然完全编译通过了,在命令行中打入vtkdesigner,期待已久的画面总算出现了,顺手按照manual画了个简单的流程图,呵呵,果然方便:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有