首页 > 解决方案 > 将 snappy-c 添加到 c++ 项目

问题描述

我第一次使用 cmake 并试图将snappy-c添加到我的 c++ 项目中。我在其 repo 中使用 Makefile 编译了 snappy-c 库。我希望将 snappy.o 添加到我的 CMakeLists.txt 将允许我使用 snappy 库。不幸的是,这给了我一个未定义的参考错误。如何正确地将 snappy-c 添加到我的 c++ 项目中?

我的目录结构是


server-side
├── src
│── common_main.cpp
├── include
└── libs/snappy-c

这是我的 CMakeLists.txt 文件

cmake_minimum_required(VERSION 3.5)

add_definitions(-std=c++11)

# include public headers
include_directories("include" ${CMAKE_CURRENT_SOURCE_DIR}/libs/snappy-c)

# recursively add .cpp files to the SOURCES variable
file(GLOB_RECURSE SOURCES "src/*.cpp" main.cpp)

# create executable using SOURCES
add_executable(common-main ${SOURCES})

target_link_libraries(
    common-main 
    ${CMAKE_CURRENT_SOURCE_DIR}/libs/snappy-c/snappy.o
)

find_library(LIBRT rt) 
   if(LIBRT)
      target_link_libraries(common-main ${LIBRT})
   endif()

我得到未定义参考的代码是

#include <iostream>
#include "snappy.h"


int main(){
   struct snappy_env env;
   snappy_init_env(&env);
}

运行make VERBOSE=1时,我得到以下输出

cd /home/kakashi/Workbench/project/build/server-side && /usr/bin/cmake -E cmake_link_script CMakeFiles/common-main.dir/link.txt --verbose=1
/usr/bin/c++   -pthread   CMakeFiles/common-main.dir/src/common_main.cpp.o CMakeFiles/common-main.dir/src/server_service.cpp.o CMakeFiles/common-main.dir/src/service_manager.cpp.o -o common-main ../../server-side/libs/snappy.o /usr/lib/x86_64-linux-gnu/librt.so 
CMakeFiles/common-main.dir/src/common_main.cpp.o: In function `main':
common_main.cpp:(.text+0x399): undefined reference to `snappy_init_env(snappy_env*)'
collect2: error: ld returned 1 exit status
server-side/CMakeFiles/common-main.dir/build.make:200: recipe for target 'server-side/common-main' failed
make[2]: *** [server-side/common-main] Error 1
.Makefile:83: recipe for target 'all' failed
.
.
.
.

标签: makefilecmakesnappy

解决方案


推荐阅读