Компиляция программы leveldb c ++ в linux ошибка?

Я установил leveldb в моем домашнем каталоге ~/local как это.

[~/temp/leveldb-1.15.0] $ make
[~/temp/leveldb-1.15.0] $ cp -av libleveldb.* $HOME/local/lib/
[~/temp/leveldb-1.15.0] $ cp -av include/leveldb $HOME/local/include/

Моя программа на С ++ такая:

#include <assert.h>
#include <iostream>
#include "leveldb/db.h"
using namespace std;

int main(int argc,char * argv[])
{
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
std::string dbpath = "tdb";
leveldb::Status status = leveldb::DB::Open(options, dbpath, &db);
assert(status.ok());
std::string key1 = "grz";
std::string key2 = "[email protected]";
cout<<"Open db OK"<<std::endl;

std::string value;
leveldb::Status s ;
s = db->Put(leveldb::WriteOptions(), key1, key2);/*key1和key2作为一对key-value对插入*/
s = db->Get(leveldb::ReadOptions(), key1, &value);/*根据key返回对应的value值*/

cout<<value<<std::endl;
delete db;/*删除数据库*/

return 0;
}

Я компилирую эту программу на C ++ следующим образом:

g++ -o Main Main.cpp ~/local/lib/libleveldb.a -lpthread -I ~/local/include/

Но я получаю ошибку, как это:

/public/home/kli/local/lib/libleveldb.a(table_builder.o): In function `leveldb::TableBuilder::WriteBlock(leveldb::BlockBuilder*, leveldb::BlockHandle*)':
table_builder.cc:(.text+0x678): undefined reference to `snappy::MaxCompressedLength(unsigned long)'
table_builder.cc:(.text+0x6b2): undefined reference to `snappy::RawCompress(char const*, unsigned long, char*, unsigned long*)'
/public/home/kli/local/lib/libleveldb.a(format.o): In function `leveldb::ReadBlock(leveldb::RandomAccessFile*, leveldb::ReadOptions const&, leveldb::BlockHandle const&, leveldb::BlockContents*)':
format.cc:(.text+0x5de): undefined reference to `snappy::GetUncompressedLength(char const*, unsigned long, unsigned long*)'
format.cc:(.text+0x64e): undefined reference to `snappy::RawUncompress(char const*, unsigned long, char*)'
collect2: ld returned 1 exit status

Я не знаю что не так.

Я новичок в Linux. Большое спасибо!

-1

Решение

libleveldb.a скучает по Снейппи, будучи связанным, что, вероятно, будет в libsnappy.a в том же каталоге.

0

Другие решения

Выглядит как Makefile является неполным.

При текущей установке вам нужно отредактировать Makefile для связи с snappy и включить -L/usr/local/lib вместо -L/usr/local/include,

(Опубликует запрос на получение позже)

0

По вопросам рекламы [email protected]