这是发生,因为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