Hello,

I’m also getting these warnings when compiling the C++ shared library as well 
as any program or example that uses hdf5_cpp.dll.
This is using Visual Studio 2015 (Professional) and HDF5-1.8.17. I’ve also 
tried v1.8.18 and had the same issue with Visual Studio 2013 and 2015.

h5exception.h(93): warning C4251: 'H5::Exception::detail_message': class 
'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' needs to 
have dll-interface to be used by clients of class 'H5::Exception'
h5exception.h(94): warning C4251: 'H5::Exception::func_name': class 
'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' needs to 
have dll-interface to be used by clients of class 'H5::Exception'

I’d prefer to use the shared libraries in Windows since that’s what we’re using 
in Linux, but that’s not an option if these warnings can’t be resolved. We’ve 
enabled the option to treat warnings as errors in our Visual Studio project, so 
we would have to disable this particular warning if there’s no other way to fix 
them.

Regards,
Barbara Jones
(no relation to the HDF Group’s Support Lead)

From: Hdf-forum [mailto:[email protected]] On Behalf Of 
Dennis Zimmermann
Sent: Sunday, November 20, 2016 10:06 AM
To: [email protected]
Subject: [Hdf-forum] C4251 Warning at C++ Example


Hello,

I am using VS 2015 Community Edition and used the installer to get HDF5-1.8.18:

Windows 64-bit [1] Compilers:   CMake VS 2015 C, C++, IVF 16

I tried to run this example:

#include <iostream>
#include <string>
#include "H5Cpp.h"
#ifndef H5_NO_NAMESPACE
    using namespace H5;
#endif

const H5std_string    FILE_NAME("h5tutr_dset.h5");
const H5std_string    DATASET_NAME("dset");
const int     NX = 4;                     // dataset dimensions
const int     NY = 6;
const int     RANK = 2;

int main (void)
{
    // Try block to detect exceptions raised by any of the calls inside it
    try
    {
    // Turn off the auto-printing when failure occurs so that we can
    // handle the errors appropriately
    Exception::dontPrint();

    // Create a new file using the default property lists.
    H5File file(FILE_NAME, H5F_ACC_TRUNC);

    // Create the data space for the dataset.
    hsize_t dims[2];               // dataset dimensions
    dims[0] = NX;
    dims[1] = NY;
    DataSpace dataspace(RANK, dims);

    // Create the dataset.
    DataSet dataset = file.createDataSet(DATASET_NAME, PredType::STD_I32BE, 
dataspace);

    }  // end of try block
    // catch failure caused by the H5File operations
    catch(FileIException error)
    {
    error.printError();
    return -1;
    }
    // catch failure caused by the DataSet operations
    catch(DataSetIException error)
    {
    error.printError();
    return -1;
    }
    // catch failure caused by the DataSpace operations
    catch(DataSpaceIException error)
    {
    error.printError();
    return -1;
    }
    return 0;  // successfully terminated
}



and got four unresolved symbols:

LNK2001 unresolved external symbol "public: static class H5::DSetCreatPropList 
const & const H5::DSetCreatPropList::DEFAULT" 
(?DEFAULT@DSetCreatPropList@H5@@2AEBV12@EB)



After adding  #define H5_BUILT_AS_DYNAMIC_LIB the errors removed, but two 
compiler warnings still exist:

C4251 'H5::Exception::detail_message': class 
'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' needs to 
have dll-interface to be used by clients of class 'H5::Exception'.

How do I get rid of these warnings?



Best regards

Dennis
_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5

Reply via email to