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. MongoDBクエリ結果をJSONファイルにエクスポートする方法

    2. SQL RPAD()

    3. Django Rest FrameworkでRedisキャッシュを実装するにはどうすればよいですか?

    4. マングースにスキーマとモデルの両方があるのはなぜですか?