eProsima FastCDR library provides two serialization mechanisms. One is the standard CDR serialization mechanism, while the other is a faster implementation of it. Looking for commercial support? Contact info@eprosima.com
Apache License 2.0
145
stars
103
forks
source link
Compiling error: function definition is marked dllimport #209
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
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_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
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.