我只是想澄清-redismodule.h不是我写的,而是来自Redis的GitHub存储库
在某些背景下,我正在编写C ++ Redis模块,并且尝试在多个文件中使用它时,redismodule.h
上总是出现链接错误。我可以确认其ifndef
标头中有一个redismodule.h
。我主要只是将其标头用于定义,并且唯一的实现是针对RedisModule_OnLoad
中的foo.cpp
方法。
这是我得到的错误:
/ usr / bin / ld:RedisFunc / bar.cpp.o:/redismodule.h:183:多个 'RedisModule_Alloc'的定义; RedisFunc / foo.cpp.o:/redismodule.h:183:首先在这里定义
对于第183行至306行,我收到此错误,对于我项目中的以下文件,我得到此错误:
这是我的项目的结构:
RedisFunc
Redis源
foo.cpp包括:
foo.h
foo.h包括:
redismodule.h
bar.cpp包括:
bar.h
bar.h包括:
redismodule.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文件可以在这里查看:
答案 0 :(得分:1)
您不能直接使用redismodule.h。它具有一些定义,而不是功能的声明。因此,如果直接包含它,将会遇到多个定义问题。
相反,您应该将此.h文件拆分为.h文件和.cpp文件。在.h文件中声明这些函数,并在.cpp文件中定义它们。