Redis
 sql >> Database >  >> NoSQL >> Redis

Creazione del modulo Redis C++:non esporta il simbolo RedisModule_OnLoad()

Questo sta accadendo perché RedisModule_OnLoad viene alterato il nome dal tuo compilatore C++.

RedisModule_OnLoad viene rinominato in __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi da GCC, quindi Redis non riesce a trovare il simbolo esportato che sta cercando.

$ nm avromodule.so | grep OnLoad                   
0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi

Puoi usare la extern "C" direttiva per garantire che i simboli esportati rimangano inalterati.

#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

Il che si traduce in un simbolo non alterato che viene esportato

nm avromodule.so | grep OnLoad                   
0000000000000970 T _RedisModule_OnLoad