sql >> Database >  >> NoSQL >> Redis

C++ Redis-module maken - het RedisModule_OnLoad()-symbool wordt niet geëxporteerd

Dit gebeurt omdat RedisModule_OnLoad krijgt naam verminkt door uw C++-compiler.

RedisModule_OnLoad wordt hernoemd naar __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi door GCC, dus Redis kan het geëxporteerde symbool dat het zoekt niet vinden.

$ nm avromodule.so | grep OnLoad                   
0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi

U kunt de extern "C" . gebruiken richtlijn om ervoor te zorgen dat uw geëxporteerde symbolen onvervormd blijven.

#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

Wat ertoe leidt dat een niet-verminkt symbool wordt geëxporteerd

nm avromodule.so | grep OnLoad                   
0000000000000970 T _RedisModule_OnLoad



  1. redis-verbindingsfout in docker-container

  2. MongoDB $asin

  3. Mongoose belooft documentatie zegt dat zoekopdrachten geen beloften zijn?

  4. mongoDB/mongoose:uniek, zo niet null