Isso está acontecendo porque
RedisModule_OnLoad
está recebendo o nome mutilado pelo seu compilador C++. RedisModule_OnLoad
está sendo renomeado para __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi
pelo GCC, então o Redis não consegue encontrar o símbolo exportado que está procurando. $ nm avromodule.so | grep OnLoad
0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi
Você pode usar o
extern "C"
diretiva para garantir que seus símbolos exportados permaneçam intactos. #include "redismodule.h"
#include <stdlib.h>
#ifdef __cplusplus
extern "C" {
#endif
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
if (RedisModule_Init(ctx,"avromodule",1,REDISMODULE_APIVER_1)
== REDISMODULE_ERR) return REDISMODULE_ERR;
return REDISMODULE_OK;
}
#ifdef __cplusplus
}
#endif
O que resulta em um símbolo não mutilado sendo exportado
nm avromodule.so | grep OnLoad
0000000000000970 T _RedisModule_OnLoad