sql >> Databáze >  >> NoSQL >> Redis

Vytváření modulu C++ Redis – neexportuje symbol RedisModule_OnLoad().

To se děje, protože RedisModule_OnLoad váš kompilátor C++ mění jméno.

RedisModule_OnLoad se přejmenovává na __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi od GCC, takže Redis nemůže najít exportovaný symbol, který hledá.

$ nm avromodule.so | grep OnLoad                   
0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi

Můžete použít extern "C" direktiva, která zajistí, že vaše exportované symboly zůstanou nezkomolené.

#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ž má za následek export nezměněného symbolu

nm avromodule.so | grep OnLoad                   
0000000000000970 T _RedisModule_OnLoad



  1. delayed_jobs vs resque vs beanstalkd?

  2. Jak monitorovat Redis jako queue engine pomocí cli podobného beanstalkd?

  3. nainstalovat mongoDB (podřízený proces selhal, ukončen s chybou číslo 100)

  4. Chyba 99 při připojování k localhost:6379. Nelze přiřadit požadovanou adresu