gflags linker-error:未定义的引用

时间:2017-11-14 07:25:09

标签: c++ compiler-errors linker-errors gflags

我安装了gflags:

$ ls /usr/local/lib/ | grep gflags
libgflags.a
libgflags_nothreads.a
$ ls /usr/local/include/ | grep gflags
gflags

包括<gflags/gflags.h>

#include <gflags/gflags.h>

DEFINE_bool(a, false, "test");

int main(int argc, char **argv) {
    gflags::ParseCommandLineFlags(&argc, &argv, true);
    return 0;
}

但我收到了链接错误!

$ g++ -lgflags a.cpp 
/tmp/cchKYAWZ.o: In function `main':
/home/wonter/gflags-2.2.1/build/a.cpp:6: undefined reference to `google::ParseCommandLineFlags(int*, char***, bool)'
/tmp/cchKYAWZ.o: In function `__static_initialization_and_destruction_0(int, int)':
/home/wonter/gflags-2.2.1/build/a.cpp:3: undefined reference to `google::FlagRegisterer::FlagRegisterer<bool>(char const*, char const*, char const*, bool*, bool*)'
collect2: error: ld returned 1 exit status

我尝试了$ g++ /usr/local/lib/libgflags.a a.cpp -o test,但遇到了同样的错误。

我的平台为Ubuntu 17.10,GCC版本为gcc version 7.2.0 (Ubuntu 7.2.0-8ubuntu3)

是不是因为我的问题的GCC版本?

1 个答案:

答案 0 :(得分:0)

您需要链接Content不包括编译命令行中的存档:

gflags

如果只有一个静态库,g ++链接器可以处理它。所以基本上你只需告诉编译器/链接器你需要$ g++ -Wl,-Bstatic -lgflags,--as-needed a.cpp -o test

gflags