Skip to content

Compiling error: function definition is marked dllimport #209

@felixf4xu

Description

@felixf4xu

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions