sql >> Databasteknik >  >> NoSQL >> Redis

Skapar C++ Redis Module - exporterar inte RedisModule_OnLoad() symbol

Detta händer eftersom RedisModule_OnLoad blir namnförstört av din C++-kompilator.

RedisModule_OnLoad döps om till __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi av GCC, så Redis kan inte hitta den exporterade symbolen den letar efter.

$ nm avromodule.so | grep OnLoad                   
0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi

Du kan använda extern "C" direktiv för att säkerställa att dina exporterade symboler förblir unmanglade.

#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

Vilket resulterar i att en icke-manglad symbol exporteras

nm avromodule.so | grep OnLoad                   
0000000000000970 T _RedisModule_OnLoad



  1. MongoDB $prov

  2. Kan jag göra två kolumner unika för varandra? eller använda sammansatta primärnycklar i redis?

  3. Initiera data på dockeriserade mongo

  4. Uppdatera ett underdokument som finns i en array som finns i ett MongoDB-dokument