#include "redismodule.h"
#include <stdlib.h>
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
if (RedisModule_Init(ctx,"helloworld",1,REDISMODULE_APIVER_1)
== REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK;
}
g++ -shared -fPIC -o avromodule.so avromodule.cpp
10.XXX.XXX.XXX:7004> module load /path/to/module/avromodule.so
(error) ERR Error loading the extension. Please check the server logs.
159392:M 17 May 10:21:19.773 # Module /path/to/module/avromodule.so does not export RedisModule_OnLoad() symbol. Module not loaded.
$ nm -CD avromodule.so | grep " T "
0000000000003622 T RedisModule_OnLoad(RedisModuleCtx*, RedisModuleString**, int)
000000000000366c T _fini
0000000000002878 T _init
Hi Sidd,
Have a look at this about mixing C and C++: https://isocpp.org/wiki/faq/mixing-c-and-cpp#call-cpp
In short, add extern "C" to your functions in C++ to make them
callable from C. It tells the compiler to make it compatible,
which it generally won't be otherwise. I'm guessing that nm simply
supports both C and C++ and won't tell you about the differences.
BR,
Hampus