Redis
 sql >> база данни >  >> NoSQL >> Redis

Създаване на C++ Redis модул - не експортира символ RedisModule_OnLoad().

Това се случва, защото RedisModule_OnLoad се променя името от вашия C++ компилатор.

RedisModule_OnLoad се преименува на __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi от GCC, така че Redis не може да намери експортирания символ, който търси.

$ nm avromodule.so | grep OnLoad                   
0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi

Можете да използвате extern "C" директива, за да гарантирате, че експортираните ви символи остават неопетнени.

#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

Което води до експортиране на неопетнен символ

nm avromodule.so | grep OnLoad                   
0000000000000970 T _RedisModule_OnLoad



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Това валидно използване на ServiceStack Redis ли е?

  2. искате да стартирате redis-сървър във фонов режим непрекъснато

  3. Как Redis ще разбере дали трябва да върне кеширани данни или свежи данни от DB

  4. Поддържайте данните на Redis живи между docker-compose надолу и нагоре в контейнера на Docker

  5. Как да конфигурирам Spring сесиите да работят с Redis в xml?