g ++找不到标题,但我确实包含了它们

Sim*_*mon 2 c++ linker g++ header-files leveldb

我开始使用c ++并且已经出错...

我正在尝试编译levelDB的一个小测试:

#include <assert.h>
#include "leveldb/db.h"

using namespace std;

int main() {
  leveldb::DB* db;
  leveldb::Options options;
  options.create_if_missing = true;
  leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
  assert(status.ok());

  return 1;
}
Run Code Online (Sandbox Code Playgroud)

这是g ++命令:

g++ -I include/ testLevelDB.cpp
Run Code Online (Sandbox Code Playgroud)

输出:

/tmp/ccuBnfE7.o: In function `main':
testLevelDB.cpp:(.text+0x14): undefined reference to `leveldb::Options::Options()'
testLevelDB.cpp:(.text+0x57): undefined reference to `leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)'
Run Code Online (Sandbox Code Playgroud)

include文件夹是具有levelDB标头的文件夹.

ism*_*ail 5

您需要告诉链接器链接到leveldb库,例如

g++ -I include/ testLevelDB.cpp -lleveldb
Run Code Online (Sandbox Code Playgroud)

但是如果库不在/usr/lib或者/usr/local/lib在那种情况下这假设libleveldb.so存在于某个$LEVELDB_PATH需要做的路径中,这将不起作用

g++ -I include -L $LEVELDB_PATH testLevelDB.cpp -lleveldb
Run Code Online (Sandbox Code Playgroud)

-L很像,-I但它告诉链接器在哪里寻找库.

此外,因为你似乎是gcc世界的新手,请看一下这个 gcc介绍文档.