Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Membuat Modul C++ Redis - tidak mengekspor simbol RedisModule_OnLoad()

Ini terjadi karena RedisModule_OnLoad semakin nama hancur oleh kompiler C++ Anda.

RedisModule_OnLoad diberi nama ulang menjadi __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi oleh GCC, jadi Redis tidak dapat menemukan simbol yang diekspor yang dicarinya.

$ nm avromodule.so | grep OnLoad                   
0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi

Anda dapat menggunakan extern "C" direktif untuk memastikan simbol yang diekspor tetap tidak rusak.

#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

Yang menghasilkan simbol yang tidak rusak diekspor

nm avromodule.so | grep OnLoad                   
0000000000000970 T _RedisModule_OnLoad



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara memberi tahu Klien di mana master Redis baru menggunakan Sentinel

  2. Bagaimana cara mencari string di redis?

  3. Menggunakan Redis untuk Antrian untuk Beberapa Aplikasi Laravel di Satu Server

  4. Cara mengaktifkan cache terdistribusi/cluster saat menggunakan redis dengan cache data pegas

  5. Koneksi maksimal Azure Redis Cache tercapai