我正在使用从Visual Studio安装程序安装的Windos 10,Clang 11.0。我想使用库redis++,所以我首先安装了库hiredis(我用选择工具集“cmake -T ClangCL...”构建了它),然后用类似的cmake命令安装了redis++。
简单测试项目的CMakeLists.txt文件如下所示:
cmake_minimum_required(VERSION 3.18)
project(HELLO)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(target hello.cpp)
find_package(hiredis)
target_include_directories(target PUBLIC ${HIREDIS_HEADER})
target_link_libraries(target ${HIREDIS_LIB})
find_package(redis++)
target_include_directories(target PUBLIC ${REDIS_PLUS_PLUS_HEADER})
target_link_libraries(target ${REDIS_PLUS_PLUS_LIB})
hello.cpp看起来像:
#include <sw/redis++/redis++.h>
using namespace sw::redis;
in main(int argc, char *argv[]){
auto redis = Redis("tcp://127:0:0:1:6379");
const sw::redis::StringView key = "test";
redis.rpop(key);
return 0;
}
当我构建项目时,我得到错误lld-link error: undefined symbol sw::redis::Redis::rpop
。如果我只是调用redis.pop()
(不传递参数),我得到too few arguments to function call
。
所以我不太确定是怎么回事,如果我以无效的方式调用rpop(),它会看到函数签名,并告诉我需要传递参数,但当我传递它时,它会说链接错误。
1条答案
按热度按时间jum4pzuy1#
成功调用
为共享库创建IMPORTED目标
redis++::redis++
,为静态库创建IMPORTED目标redis++::redis++_static
。为了使用Redis++,你需要将这些目标中的一个链接到可执行文件中:(与IMPORTED目标的链接会自动设置包含目录,因此不需要调用
target_include_directories
。)如果在相应的
find_path
和find_library
调用中设置这些变量,则使用变量REDIS_PLUS_PLUS_HEADER
和REDIS_PLUS_PLUS_LIB
的方法有效,如其文档中所述:https://github.com/sewenew/redis-plus-plus#build-with-cmake。与其他项目一样,
find_package
方法(在该文章开头描述)始终是首选方法。