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.
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:
the reason is that when compiled as shared lib (dll on windows),
Cdr_DllAPIis 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
the error message says that the function is marked as
dllimportbut 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.