2011-10-30 88 views
1

我升级到MS VC++ 2010(Visual Studio Professional)并升级1.45.0,但我仍在尝试使用HDF5 1.8.4p1内置MS VC++ 2008和boost 1.39.0;一切都很好(我明确提供了我的HDF5 lib路径中所需的boost_zlib-vc90 *。[lib/dll])。但是,当我跑我得到了HDF5库以下运行时错误:出现HDF5内置MS VC++ 2008和boost 1.39.0在使用MS VC++ 2010 + boost构建的应用程序库中1.45.0

Unhandled exception at 0x... in <exec>: 0x... : Access violation reading location 0xffffffffffffffff 

错误必须明确隔离到HDF5库。访问冲突发生在函数调用内部的H5File(...)构造函数中(我通过分成两行代码进行确认)。我也试图改变HDF5文件访问标志,但无济于事:

m_file.reset(new H5::H5File(path, H5F_ACC_RDONLY)); 

这里m_file的类型为:

boost::shared_ptr<H5::H5File> 

我必须比建设HDF5库与MS VC之外没有其他办法++ 2010和boost_zlib 1.45?

编辑:

只是想跟进,我结束了建设HDF5库(是一个痛苦的一点点,但事情成功的使用CMake的路线)上MS VC++ 2010和我的应用程序工作正常现在。再次感谢。

回答

1

这将永远不会工作,boost的不同版本定义为不是二进制兼容的(任何广泛使用C++模板的库很可能不会与其他版本的相同库二进制兼容)。 对于视觉工作室附带的C++标准库的不同版本,这也同样适用。

唯一的解决方案是用MSVC10重新编译HDF5并提升1.45。

+0

谢谢@smerlin。这正是我希望听到的。 –

+0

+1,绝对正确。另外,所有的东西都必须用相同的CRT编译器选项编译。 – ildjarn

+0

@ildjarn:如果CRT版本在次要版本号(Visual Studio版本和Service Pack版本必须匹配)上有所不同,那么它的大部分时间都可以,但只有在动态链接时,以及在运行时加载的CRT版本是相同的可以使用清单文件来实现)。 – smerlin