我安装了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版本有问题吗?
最佳答案
您需要针对gflags
进行链接,但不将归档文件包含在编译命令行中:
$ g++ -Wl,-Bstatic -lgflags,--as-needed a.cpp -o test
如果只有静态库,则g++链接程序可以处理该库。因此,基本上,您只需要告诉编译器/链接器您需要
gflags
:$ g++ a.cpp -o test -lgflags