我只是想澄清一下-redismodule.h不是我写的,而是来自于redis的github repo
对于一些背景,我正在编写一个C++ ReISIS模块,当试图在多个文件中使用它时,我一直在获取redismodule.h
上的链接错误。我可以确认他们的标题中有一个ifndef
。我主要是使用它们的头来定义,而唯一的实现是针对redismodule.h
中的RedisModule_OnLoad
方法。
这是我得到的错误:
/usr/bin/ld:redisfunc/bar.cpp.o:/redismodule.h:183:多个
“redismodule_alloc”的定义;
redisfunc/foo.cpp.o:/redismodule.h:183:此处首先定义
对于183到306行,我得到这个错误,对于我的项目中的以下文件,我得到这个错误:
食品CPP
钢筋CPP
这是我的项目结构:
再贴现
食品CPP
钢筋CPP
redis源
再发现.h
foo.cpp包括:
福奥
foo.h包括:
再发现.h
bar.cpp包括:
酒吧
bar.h包括:
再发现.h
我的cmakelists.txt文件:
include_directories(src)
add_executable(redis-server
src/adlist.c
...
src/t_stream.c
)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -pedantic -DREDIS_STATIC= -Wall -W -Wno-missing-field-initializers")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -g -ggdb -rdynamic")
include_directories(RedisFunc)
configure_file(redis.conf redis.conf COPYONLY)
add_library(RedisFunc MODULE
RedisFunc/foo.cpp
RedisFunc/bar.cpp
)
可以在此处查看redismodule.h文件:
https://github.com/antirez/redis/blob/5.0/src/redismodule.h
最佳答案
不能直接使用redismodule.h。它有一些定义而不是函数声明。所以如果直接包含它,就会出现多个定义问题。
相反,您应该将此.h文件拆分为.h文件和.cpp文件。在.h文件中声明这些函数,并在.cpp文件中定义它们。