C4251 Warning at C++ Example

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

C4251 Warning at C++ Example

Dennis

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.
[hidden email]
http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: C4251 Warning at C++ Example

Barbara Jones

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:[hidden email]] On Behalf Of Dennis Zimmermann
Sent: Sunday, November 20, 2016 10:06 AM
To: [hidden email]
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.
[hidden email]
http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5
Loading...