Điều này đang xảy ra vì RedisModule_OnLoad
đang bị trình biên dịch C ++ của bạn làm sai tên.
RedisModule_OnLoad
đang được đổi tên thành __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi
bởi GCC, vì vậy Redis không thể tìm thấy biểu tượng đã xuất mà nó đang tìm kiếm.
$ nm avromodule.so | grep OnLoad
0000000000000970 T __Z18RedisModule_OnLoadP14RedisModuleCtxPP17RedisModuleStringi
Bạn có thể sử dụng extern "C"
chỉ thị để đảm bảo các ký hiệu đã xuất của bạn không bị lệch.
#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
Điều này dẫn đến việc xuất một biểu tượng không có dấu gạch chéo
nm avromodule.so | grep OnLoad
0000000000000970 T _RedisModule_OnLoad