首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法编译具有snappy支持的leveldb

无法编译具有snappy支持的leveldb
EN

Stack Overflow用户
提问于 2018-04-03 00:07:30
回答 2查看 2.4K关注 0票数 2

我正试图在mac x high上构建支持https://github.com/google/leveldb压缩的https://github.com/google/snappy,以便以后在XCode项目中使用,我正在遍历自述的标准编译过程,用于这两个项目。这包括通过cmake为两个项目构建项目。对于snappy项目,程序是平滑的,所有的构建和安装都是完美无缺的。但是,对于leveldb,我无法使cmake找到以前通过make install安装的snappy库。我不明白如何调试cmake并找到它查找库的位置。

任何帮助都是非常感谢的。

以下是这两种构建的结果:

编辑

下面是一个输出,看起来/usr/local/lib在列表中

另一个编辑

我试着按照sel-fish提供的解决方案运行sel-fish。但是,如果出现以下输出失败:

代码语言:javascript
复制
Undefined symbols for architecture x86_64:
  "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
      void std::__1::vector<snappy::SnappySinkAllocator::Datablock, std::__1::allocator<snappy::SnappySinkAllocator::Datablock> >::__push_back_slow_path<snappy::SnappySinkAllocator::Datablock const>(snappy::SnappySinkAllocator::Datablock const&) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<char*, std::__1::allocator<char*> >::__push_back_slow_path<char* const>(char* const&) in libsnappy.a(snappy.cc.o)
  "std::logic_error::logic_error(char const*)", referenced from:
      void std::__1::vector<snappy::SnappySinkAllocator::Datablock, std::__1::allocator<snappy::SnappySinkAllocator::Datablock> >::__push_back_slow_path<snappy::SnappySinkAllocator::Datablock const>(snappy::SnappySinkAllocator::Datablock const&) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<char*, std::__1::allocator<char*> >::__push_back_slow_path<char* const>(char* const&) in libsnappy.a(snappy.cc.o)
  "std::length_error::~length_error()", referenced from:
      void std::__1::vector<snappy::SnappySinkAllocator::Datablock, std::__1::allocator<snappy::SnappySinkAllocator::Datablock> >::__push_back_slow_path<snappy::SnappySinkAllocator::Datablock const>(snappy::SnappySinkAllocator::Datablock const&) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<char*, std::__1::allocator<char*> >::__push_back_slow_path<char* const>(char* const&) in libsnappy.a(snappy.cc.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::resize(unsigned long, char)", referenced from:
      snappy::Uncompress(char const*, unsigned long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) in libsnappy.a(snappy.cc.o)
      snappy::Compress(char const*, unsigned long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) in libsnappy.a(snappy.cc.o)
  "std::terminate()", referenced from:
      ___clang_call_terminate in libsnappy.a(snappy.cc.o)
  "typeinfo for std::length_error", referenced from:
      void std::__1::vector<snappy::SnappySinkAllocator::Datablock, std::__1::allocator<snappy::SnappySinkAllocator::Datablock> >::__push_back_slow_path<snappy::SnappySinkAllocator::Datablock const>(snappy::SnappySinkAllocator::Datablock const&) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<char*, std::__1::allocator<char*> >::__push_back_slow_path<char* const>(char* const&) in libsnappy.a(snappy.cc.o)
  "vtable for __cxxabiv1::__class_type_info", referenced from:
      typeinfo for snappy::Sink in libsnappy.a(snappy-sinksource.cc.o)
      typeinfo for snappy::Source in libsnappy.a(snappy-sinksource.cc.o)
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for __cxxabiv1::__si_class_type_info", referenced from:
      typeinfo for snappy::ByteArraySource in libsnappy.a(snappy-sinksource.cc.o)
      typeinfo for snappy::UncheckedByteArraySink in libsnappy.a(snappy-sinksource.cc.o)
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::length_error", referenced from:
      void std::__1::vector<snappy::SnappySinkAllocator::Datablock, std::__1::allocator<snappy::SnappySinkAllocator::Datablock> >::__push_back_slow_path<snappy::SnappySinkAllocator::Datablock const>(snappy::SnappySinkAllocator::Datablock const&) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<char*, std::__1::allocator<char*> >::__push_back_slow_path<char* const>(char* const&) in libsnappy.a(snappy.cc.o)
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "operator delete[](void*)", referenced from:
      snappy::Compress(snappy::Source*, snappy::Sink*) in libsnappy.a(snappy.cc.o)
      snappy::SnappySinkAllocator::Deleter(void*, char const*, unsigned long) in libsnappy.a(snappy.cc.o)
  "operator delete(void*)", referenced from:
      snappy::UncompressAsMuchAsPossible(snappy::Source*, snappy::Sink*) in libsnappy.a(snappy.cc.o)
      snappy::Uncompress(snappy::Source*, snappy::Sink*) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<snappy::SnappySinkAllocator::Datablock, std::__1::allocator<snappy::SnappySinkAllocator::Datablock> >::__push_back_slow_path<snappy::SnappySinkAllocator::Datablock const>(snappy::SnappySinkAllocator::Datablock const&) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<char*, std::__1::allocator<char*> >::__push_back_slow_path<char* const>(char* const&) in libsnappy.a(snappy.cc.o)
      snappy::ByteArraySource::~ByteArraySource() in libsnappy.a(snappy-sinksource.cc.o)
      snappy::UncheckedByteArraySink::~UncheckedByteArraySink() in libsnappy.a(snappy-sinksource.cc.o)
  "operator new[](unsigned long)", referenced from:
      snappy::internal::WorkingMemory::GetHashTable(unsigned long, int*) in libsnappy.a(snappy.cc.o)
      snappy::Compress(snappy::Source*, snappy::Sink*) in libsnappy.a(snappy.cc.o)
      snappy::SnappyScatteredWriter<snappy::SnappySinkAllocator>::SlowAppend(char const*, unsigned long) in libsnappy.a(snappy.cc.o)
  "operator new(unsigned long)", referenced from:
      void std::__1::vector<snappy::SnappySinkAllocator::Datablock, std::__1::allocator<snappy::SnappySinkAllocator::Datablock> >::__push_back_slow_path<snappy::SnappySinkAllocator::Datablock const>(snappy::SnappySinkAllocator::Datablock const&) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<char*, std::__1::allocator<char*> >::__push_back_slow_path<char* const>(char* const&) in libsnappy.a(snappy.cc.o)
  "___cxa_allocate_exception", referenced from:
      void std::__1::vector<snappy::SnappySinkAllocator::Datablock, std::__1::allocator<snappy::SnappySinkAllocator::Datablock> >::__push_back_slow_path<snappy::SnappySinkAllocator::Datablock const>(snappy::SnappySinkAllocator::Datablock const&) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<char*, std::__1::allocator<char*> >::__push_back_slow_path<char* const>(char* const&) in libsnappy.a(snappy.cc.o)
  "___cxa_begin_catch", referenced from:
      ___clang_call_terminate in libsnappy.a(snappy.cc.o)
  "___cxa_free_exception", referenced from:
      void std::__1::vector<snappy::SnappySinkAllocator::Datablock, std::__1::allocator<snappy::SnappySinkAllocator::Datablock> >::__push_back_slow_path<snappy::SnappySinkAllocator::Datablock const>(snappy::SnappySinkAllocator::Datablock const&) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<char*, std::__1::allocator<char*> >::__push_back_slow_path<char* const>(char* const&) in libsnappy.a(snappy.cc.o)
  "___cxa_pure_virtual", referenced from:
      vtable for snappy::Sink in libsnappy.a(snappy-sinksource.cc.o)
      vtable for snappy::Source in libsnappy.a(snappy-sinksource.cc.o)
  "___cxa_throw", referenced from:
      void std::__1::vector<snappy::SnappySinkAllocator::Datablock, std::__1::allocator<snappy::SnappySinkAllocator::Datablock> >::__push_back_slow_path<snappy::SnappySinkAllocator::Datablock const>(snappy::SnappySinkAllocator::Datablock const&) in libsnappy.a(snappy.cc.o)
      void std::__1::vector<char*, std::__1::allocator<char*> >::__push_back_slow_path<char* const>(char* const&) in libsnappy.a(snappy.cc.o)
  "___gxx_personality_v0", referenced from:
      snappy::GetUncompressedLength(snappy::Source*, unsigned int*) in libsnappy.a(snappy.cc.o)
      snappy::Compress(snappy::Source*, snappy::Sink*) in libsnappy.a(snappy.cc.o)
      snappy::RawUncompressToIOVec(char const*, unsigned long, iovec const*, unsigned long) in libsnappy.a(snappy.cc.o)
      snappy::RawUncompressToIOVec(snappy::Source*, iovec const*, unsigned long) in libsnappy.a(snappy.cc.o)
      snappy::RawUncompress(char const*, unsigned long, char*) in libsnappy.a(snappy.cc.o)
      snappy::RawUncompress(snappy::Source*, char*) in libsnappy.a(snappy.cc.o)
      snappy::Uncompress(char const*, unsigned long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) in libsnappy.a(snappy.cc.o)
      ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-03 02:58:25

看来你的链接器找不到/usr/local/lib/libsnappy.a

clang -Xlinker -v试图运行 /usr/local/lib,确保/usr/local/lib存在于Library search paths

代码语言:javascript
复制
clang -Xlinker -v

@(#)PROGRAM:ld  PROJECT:ld64-278.4
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)
Library search paths:
    /usr/lib
    /usr/local/lib

通常,它会存在。那就试试sudo update_dyld_shared_cache

谈到调试cmake,您可以使用像--debug-output这样的标志

代码语言:javascript
复制
cmake --debug-output --trace --debug-trycompile ..

更新

代码语言:javascript
复制
check_library_exists(snappy snappy_compress "" HAVE_SNAPPY)

实际上,按照下面的操作,它将尝试链接snappy并查找该函数是否存在:

代码语言:javascript
复制
cc  -DCHECK_FUNCTION_EXISTS=snappy_compress -Wl,-search_paths_first -Wl,-headerpad_max_install_names -o check_snappy_exist CheckFunctionExists.c -lsnappy

CheckFunctionExists.c的来源,您可以找到这里

我认为这会简化问题。

票数 2
EN

Stack Overflow用户

发布于 2018-04-03 15:25:56

我已经用brew完成了安装brew的工作。同样重要的是将XCode中的路径添加到User Header Search Paths中,如下所示:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49620421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档