On 10.05.21 г. 22:23, Steven Rostedt wrote:
On Mon, 10 May 2021 21:50:57 +0300 Yordan Karadzhov <y.karadz@xxxxxxxxx> wrote:On 10.05.21 г. 21:25, Steven Rostedt wrote:On Mon, 10 May 2021 14:53:08 +0300 Yordan Karadzhov <y.karadz@xxxxxxxxx> wrote:Can you show me how you see this error, because this solution does not make any sense.The problem is that some plugins can build from multiple source files. For example in the case when part of the plugin is written in C and another part in C++. In those cases we cannot have the functions being static.So it's because its a mixture of C and C++ code? And you can't make them static?No, this has no direct connection with C++. The static functions are the same in C++. It became an issue if you have multiple source files. If this is the case you have to put the macro in a header file, so that you can use the functions defined in the macro in all your source files. But this does not work, because the macro defines some global variables as well. To solve this I defined second macro to be used only in the header, but then the functions can't be static.Still does not make sense. Obviously, I'm missing something to connect the dots. Can you show me the error message that you are fixing.
It is not an error message. It is a malfunctioning. Say you have a macro that looks like this:
#define KS_DEFINE_PLUGIN_CONTEXT(type) \ static type **__context_handler; \ static ssize_t __n_streams = -1; \ static inline type *__get_context(int sd) \ { \ if (sd < 0 || sd >= __n_streams) \ return NULL; \ return __context_handler[sd]; \ } \ and you want to use __get_context(int sd) in different source files.If you just place the macro in a header, each source file will have its own "static __context_handler" variable which is not what I would like.
So this is a malfunctioning.I can solve this problem by having a second macro that only declares "type *__get_context(int sd)" and place this macro in the header, while keeping the original macro in one of the source files, but then __get_context() cannot be static. If I go this way and I have multiple plugins using the same macro I will have multiple versions of the same function and this time the dynamic linking will start to misbehave.
Does that make sense? Thanks! Yordan
Thanks, -- Steve