【问题标题】:rocksdb build failed in Clion at MacOS在 MacOS 的 Clion 中,rocksdb 构建失败
【发布时间】:2018-10-23 03:21:54
【问题描述】:

我的环境:

macOS 10.14
Clion 2018.1.2
gcc-8.2

我想用Clion来试试rocksdb。我在示例目录中添加了一个新的CMakeLists.txt 文件。

CMakeLists.txt

add_subdirectory(examples)

examples/CMakeLists.txt

add_executable(s_test simple_example.cc)
target_link_libraries(s_test ${LIBS})

但是当我构建 s_test 可执行文件时,我得到如下错误。

Linking CXX shared library librocksdb.dylib
Undefined symbols for architecture x86_64:
"google::FlagRegisterer::FlagRegisterer<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(char const*, char const*, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)", referenced from:
  __static_initialization_and_destruction_0(int, int) in db_bench_tool.cc.o
  __static_initialization_and_destruction_0(int, int) in trace_analyzer_tool.cc.o
"google::SetUsageMessage(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
  rocksdb::db_bench_tool(int, char**) in db_bench_tool.cc.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[3]: *** [librocksdb.5.17.0.dylib] Error 1
make[2]: *** [CMakeFiles/rocksdb-shared.dir/all] Error 2
make[1]: *** [examples/CMakeFiles/s_test.dir/rule] Error 2

而且我之前已经安装了 gflags。

ls /usr/local/lib | grep gflags

libgflags.2.2.1.dylib
libgflags.2.2.dylib
libgflags.dylib
libgflags_nothreads.2.2.1.dylib
libgflags_nothreads.2.2.dylib
libgflags_nothreads.dylib

如何解决?谢谢!

【问题讨论】:

  • 我没有在您的代码中看到 linking 与 gflags。变量LIBS 似乎为空(未设置)。

标签: makefile cmake clion rocksdb


【解决方案1】:

您将需要从 git hub 下拉 gflags 包。我也使用 CLION。

所以,这是我拉下rocksdb和gflags的过程:

~> cd CLionProjects
~/CLionProjects> git clone git@github.com:facebook/rocksdb.git
~/CLionProjects> cd rocksdb
~/CLionProjects/rocksdb> git clone git@github.com:gflags/gflags.git

然后我在

创建了 gflagss.cmake

~/CLionProjects/rocksdb/cmake/modules

内容如下:

# - Find GFLAGS

set(GFLAGS_ROOT_DIR ./gflags/cmake-build-debug)
find_path(GFLAGS_INCLUDE_DIR
  NAMES bzlib.h
  HINTS ${GFLAGS_ROOT_DIR}/include)

find_library(GFLAGS_LIBRARIES
  NAMES gflags
  HINTS ${GFLAGS_ROOT_DIR}/lib)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(bzip2 DEFAULT_MSG BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)

mark_as_advanced(
  GFLAGS_LIBRARIES
  GFLAGS_INCLUDE_DIR)

然后我在 CLion 中打开了 gflags 文件夹并构建了 glfags。

然后我为rocksdb打开了一个单独的CLion窗口/文件夹并构建了它。

如果有帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 2018-08-07
    • 1970-01-01
    • 2019-01-19
    • 2018-03-11
    • 2020-02-06
    • 1970-01-01
    • 2022-12-19
    • 2020-01-10
    • 2017-08-17
    相关资源
    最近更新 更多