Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Tworzenie modułu Redis C++ - nie eksportuje symbolu RedisModule_OnLoad()

Dzieje się tak, ponieważ RedisModule_OnLoad otrzymujesz zniekształconą nazwę przez twój kompilator C++.

RedisModule_OnLoad zmienia nazwę na __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi przez GCC, więc Redis nie może znaleźć wyeksportowanego symbolu, którego szuka.

$ nm avromodule.so | grep OnLoad                   
0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi

Możesz użyć extern "C" dyrektywy, aby zapewnić, że eksportowane symbole pozostaną niezmienione.

#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

Co powoduje wyeksportowanie niezniekształconego symbolu

nm avromodule.so | grep OnLoad                   
0000000000000970 T _RedisModule_OnLoad



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Odmowa połączenia Docker Redis

  2. Obsługa konkurencyjnych konsumentów w Redis Pub/Sub?

  3. Rozszerzenie phpredis nie działa, nie można załadować „redis.so”

  4. Redis, jak zwiększyć wszystkie wyniki zset za pomocą ZINCRBY?

  5. NodeJs - za pomocą redis, connect-redis z express