Compiling error: function definition is marked dllimport
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 @felixf4xu, thanks for using Fast CDR, and for the report. Sure! Please, go ahead with your contribution!
@felixf4xu 非常感谢,我也是在windows上编译时候遇到了这个问题,非常感谢在这里看到了解决方法。