OpendTect4.0.1在Windows的编译过程,在Debug状态下运行出R6034错,Release状态下可以运行!

  忙活了几天的OpendTect4.0.1的编译安装,终于编译通过,但Release可以运行,DEBUG却出现R6034错误。

  把杂乱的过程记下来:

一、准备工作

(1) VisualStudio 2005是必须的,好像也可以用2008,但官方推荐用2005。

(2) 安装VisualStudio 2005 SP1,这是QT4.5.0要求装的,安装这个东西用了好长时间,内存占用700多M。

(3) 安装QT 4.5.0,要了个commerical版本的,相当好用,普通版可能在编译时找不到Qtcore4.lib等库文件。

(4) 安装Coin-3.1.3,把所有文件放到一个目录中即可。

(5) 安装FFTW3.2.2,也是放到某个目录中即可。

(6) 安装OpendTect-4.0.1,我是安装的developer版的

二、编译过程
(1) 在opendTect的目录中有一个msvc子目录,里面有一个odvars_example.bat文件,改名为odvars.bat  然后修改各个环境变量的值与你前面安装的软件相对应。

(2) 在编译前建议删除debug和intermediate目录中原来的所有文件,免得最后运行时编译用的lib和最后运行的dll不一致。

(3) 运行start_msvc_od.bat,会启动Visual Studio 2005,并打开OpendTect.sln工程文件。当然也可以直接启动Visual Studio 2005,然后打开OpendTect.sln工程文件,但需要设置odvars.bat中的环境变量,直接在“我的电脑”右键中设置,主要的环境变量是QTDIR、COINDIR和WORK这三个。

(4) 先编译lib中Basic.dll, 如果这个能够编译成功,说明环境变量设置没有问题。如果在Moc-ing qtimercomm时出现问题,说明是QT的环境变量没有设置好,通常还需要在PATH中把C:\Qt\4.5.0\bin这样的路径加上。

(5) 再编译lib中的algo.dll,如果提示找不到libfftw3f-3.lib,则需要在VC++中设置lib路径,使其编译时能够找到libfftw3f-3.lib这个文件

(6) 再往下就会遇到simvoleon2.lib的问题了。从网上需下载SIM Voleon 2.0.0,那个2.0.1只是补丁,只下载2.0.1不行,会缺少一些头文件。

(7) 另外下载SoQt1.5.0.zip文件,是需要在Visual Studio 2005中编译的,编译后生成include和一些其它文件,自动放到coin-3.1.3的目录中了,还有soqt1.lib

(8) 经过一番折腾,终于编译通过了!

三、运行时

(1) 将fftw3f-3.dll、coin3.dll、soqt1.dll、simvoleon2.dll等文件复制到debug目录中
(2) 在环境变量PATH中加上d:\qt\4.5.0\bin,当然这个环境变量应该尽早加上
(3) 运行时一阵加载过后,弹出了缺少msvcp80.dll和msvcr80.dll文件,从C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT目录中找到一个得到到C:\Windows\System32中
(4) 然后又提示说coin3.dll和coin2.dll不能同时加载,用depends工具检查依赖关系,原来从网上下载的simvoleon2.dll编译时用的coin2.lib,看来只能自己编译simvoleon2.dll了,只能从网上到处找simvoleon用coin3编译的版本,最后终于从这个网站http://hg.sim.no/SIMVoleon/default/file/0eb85216a1ad/build/msvc8上找到了源文件,经过一阵子编译,生成了simvoleon2.dll。

(5) 最后遇到的是著名的R6034错误。有说是manifest的问题,有说项目的依赖关系设置不准,有说链接时忽略msvcrt.lib库的,有说要清理注册表的,从这个网站中可以看到一些提示。

(6) 这个R6034问题折腾了我近2天,最终没有搞定。但在Release方式下编译后竟然可以顺利运行。真是太不可思议了!

posted @ 2010-03-16 10:54  申龙斌的程序人生  阅读(2576)  评论(7编辑  收藏  举报