这是发生,因为
RedisModule_OnLoad越来越重整名称由C
++编译器。
RedisModule_OnLoad被
__Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringiGCC
重命名为,因此Redis找不到所需的导出符号。
$ nm avromodule.so | grep onLoad 0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi
您可以使用
extern "C"指令来确保您导出的符号保持未破坏状态。
#include "redismodule.h"#include <stdlib.h>#ifdef __cplusplusextern "C" {#endifint 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



