Fast-CDR icon indicating copy to clipboard operation
Fast-CDR copied to clipboard

Compiling error: function definition is marked dllimport

Open felixf4xu opened this issue 1 year ago • 1 comments

Hi,

When fastcdr is compiled and installed, I continue to build fastrtps, (compile on Windows and set -DBUILD_SHARED_LIBS=ON),

then I got lots of similar errors:

C:/ros/jazzy/install/include/fastcdr/Cdr.h:2792:21: error: function 'eprosima::fastcdr::Cdr& eprosima::fastcdr::Cdr::deserialize_type(eprosima::fastcdr::EncodingAlgorithmFlag, std::function<bool(eprosima::fastcdr::Cdr&, const eprosima::fastcdr::MemberId&)>)' definition is marked dllimport
 2792 |     Cdr_DllAPI Cdr& deserialize_type(
      |                     ^~~~~~~~~~~~~~~~

the reason is that when compiled as shared lib (dll on windows), Cdr_DllAPI is defined as __declspec( dllexport ) when compiling fastcdr and __declspec( dllimport ) when compiling fastrtps and includes fastcdr as a shared lib.

Then the included header file (for fastftps), is like this

//Cdr.h
    Cdr_DllAPI Cdr& deserialize_type(
            EncodingAlgorithmFlag type_encoding,
            std::function<bool (Cdr&, const MemberId&)> functor)
    {
        return (this->*deserialize_type_)(type_encoding, functor);
    }

the error message says that the function is marked as dllimport but it has a function body (definition) at the same time, which is an error.

The suggested change is to move the function body/definition from .h file to .cpp file.

I'd like to create a PR if the suggestion above is acceptable.

felixf4xu avatar Jun 03 '24 01:06 felixf4xu

Hi @felixf4xu, thanks for using Fast CDR, and for the report. Sure! Please, go ahead with your contribution!

JesusPoderoso avatar Jun 03 '24 14:06 JesusPoderoso

@felixf4xu 非常感谢,我也是在windows上编译时候遇到了这个问题,非常感谢在这里看到了解决方法。

chinanewer avatar Feb 08 '25 06:02 chinanewer