c++ - g++ 找不到 header ,但我确实包含了它们

标签 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;
}

这是 g++ 命令:

g++ -I include/ testLevelDB.cpp

输出:

/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**)'

包含文件夹是带有 levelDB header 的文件夹。

最佳答案

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

g++ -I include/ testLevelDB.cpp -lleveldb

但如果库不在 /usr/lib/usr/local/lib 中,则假设 libleveldb.so 存在于一些名为 $LEVELDB_PATH 的路径你需要做

g++ -I include -L $LEVELDB_PATH testLevelDB.cpp -lleveldb

-L-I 非常相似,但它告诉链接器到哪里寻找库。

此外,由于您似乎是 gcc 世界的新手,请查看 this gcc 介绍文件。

关于c++ - g++ 找不到 header ,但我确实包含了它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21435690/

相关文章:

linux - 对 %esp 的修改导致 SIGSEGV

c++ - 从图像中裁剪椭圆形而不是在 OpenCV 中绘制椭圆形

c++ - 如何在代码中进行可扩展存储引擎 (JetBlue) 修复?

c++ - 使用std::list c++在不使用直接循环的情况下将文本文件读入列表

c++ - UE4项目链接错误,描述为空

c++ - Qt cross-platform issue : compiles fine on Windows, linker error on Linux

c++ - Make 期间的链接器错误

c++ - C++11 中的数据竞争、UB 和计数器

c++ - 为什么 ".exe"从相同的 c/c++ 源代码编译时比 ".out"大得多?

C++ 程序调用 C 函数在 g++ 链接期间获取 undefined reference