【问题标题】:HDF5 built with MS VC++ 2008 and boost 1.39.0 libs in application built with MS VC++ 2010 + boost 1.45.0使用 MS VC++ 2008 构建的 HDF5 和使用 MS VC++ 2010 + boost 1.45.0 构建的应用程序中的 boost 1.39.0 库
【发布时间】:2011-12-18 02:01:17
【问题描述】:

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

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>

除了使用 MS VC++ 2010 和 boost_zlib 1.45 构建 HDF5 库之外,我没有其他办法了吗?

编辑:

只是想跟进一下,我最终在 MS VC++ 2010 上构建了 HDF5 库(有点痛苦,但使用 CMake 路线解决了问题),我的应用程序现在运行良好。再次感谢。

【问题讨论】:

    标签: c++ visual-studio-2010 visual-c++ boost hdf5


    【解决方案1】:

    这永远不会奏效,不同版本的 boost 肯定不兼容二进制(任何广泛使用 C++ 模板的库很可能与同一库的其他版本不兼容)。 对于 Visual Studio 附带的不同版本的 C++ 标准库可能也是如此。

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

    【讨论】:

    • 谢谢@smerlin。这就是我希望听到的。
    • +1,绝对正确。此外,所有内容都必须针对相同的 CRT 使用相同的编译器选项进行编译。
    • @ildjarn:如果 CRT 版本的次要版本号不同(Visual Studio 版本和 Service Pack 版本必须匹配),大多数情况下都可以,但前提是动态链接,并且如果 CRT 版本在运行时加载是相同的(可以使用清单文件来实现)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多