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

Oprettelse af C++ Redis Module - eksporterer ikke RedisModule_OnLoad() symbol

Dette sker fordi RedisModule_OnLoad bliver navnet ødelagt af din C++ compiler.

RedisModule_OnLoad bliver omdøbt til __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi af GCC, så Redis er ikke i stand til at finde det eksporterede symbol, den leder efter.

$ nm avromodule.so | grep OnLoad                   
0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi

Du kan bruge den extern "C" direktiv for at sikre, at dine eksporterede symboler forbliver umanglede.

#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

Hvilket resulterer i, at et umanglet symbol bliver eksporteret

nm avromodule.so | grep OnLoad                   
0000000000000970 T _RedisModule_OnLoad



  1. Hvordan knytter man egenskaber til socket.io-objekt i Redis Store?

  2. Sådan anvender du 'ELLER'-betingelsen i kommandoen Redis-taster

  3. Introduktion til Redis Cluster Sharding – fordele, begrænsninger, implementering og klientforbindelser

  4. Hvordan får man nøglen fra værdi i nøgle/værdipar i redis butiksklient?