编译出两个开发的库,但是使用时报错"未定义的引用",说明.cpp里编译出的编译单元里符号和库文件符号对不上 老余一顿操作ok,总结如下:
- 库的
c++版本保持和demo的c++版本保持一致,比如,不要搞成库是用c++11编译,但是demo用c++17来编译 - 尽量不要把三方库的命名空间完全释放出来,用
sw::redis::Redis redis(URL);来引用
就本例而言,sw::redis与std命名空间有冲突
- 贴出
CMakeList.txtcmake_minimum_required(VERSION 3.10) set(CMAKE_CXXFLAGS "${CMAKE_CXX_FLAGS} -o3 --std=c++11 -lstdc++fs") project(test_redis) find_package(OpenCV REQUIRED) # set(HIREDIS_LIBS_PATH /usr/local/lib) include_directories(${OpenCV_INCLUDE_DIRS}) # 直接包含安装时的头文件,前提是项目小,且库是以默认路径安装的,就推荐如下两种,清爽 include_directories(/usr/local/include) link_directories(/usr/local/lib) #link_directories(${REDISCPP_LIBS_PATH}) add_executable(${PROJECT_NAME} test_redis.cpp) target_link_libraries(${PROJECT_NAME} redis++ hiredis ${OpenCV_LIBS} -lstdc++fs) - 编译
redis++时指定以c++11编译cmake -DREDIS_PLUS_PLUS_CXX_STANDARD=11 -DREDIS_PLUS_PLUS_BUILD_TEST=OFF -DREDIS_PLUS_PLUS_BUILD_SHARED=OFF .. - 小技巧,用
ldd来查看需要链接哪些库文件