ऐसा इसलिए हो रहा है क्योंकि RedisModule_OnLoad
आपके सी ++ कंपाइलर द्वारा नाम उलझा रहा है।
RedisModule_OnLoad
__Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi
में फिर से नाम दिया जा रहा है जीसीसी द्वारा, इसलिए रेडिस निर्यातित प्रतीक को खोजने में असमर्थ है जिसे वह ढूंढ रहा है।
$ 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