glog
当我使用库(代码中未使用 Google 的日志库)构建一个简单的 C++ 程序时,我收到“未定义的引用”错误。当我-lglog
从构建命令中删除时,链接成功。
请注意,我添加到链接的库根本没有在代码中使用,尽管它导致构建失败。此外,glog
和log4cpp
库应该是独立的。
你能解释一下这种不寻常的行为吗?
环境:Ubuntu 14.04
代码:
//test.cpp
#include "log4cpp/Appender.hh"
#include "log4cpp/FileAppender.hh"
int main() {
log4cpp::Appender *appender;
appender = new log4cpp::FileAppender("default", "program.log");
return 0;
}
工作构建命令:
$ g++ test.cpp -llog4cpp -lpthread
构建命令失败:
$ g++ test.cpp -llog4cpp -lglog -lpthread
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_key_create'
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_getspecific'
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_key_delete'
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_setspecific'
collect2: error: ld returned 1 exit status
编辑:
此命令也成功构建:
g++ test.cpp -llog4cpp -lpthread -lglog
此命令失败(更改库的顺序):
$ g++ test.cpp -llog4cpp -lglog -lpthread
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_key_create'
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_getspecific'
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_key_delete'
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_setspecific'
collect2: error: ld returned 1 exit status
这成功了:
$ g++ test.cpp -pthread -llog4cpp
这失败了:
$ g++ test.cpp -pthread -llog4cpp -lglog
编辑2:
我研究了重复的建议(1) 和(2),以发现那里可能对我有用,但结果却是无关紧要的,因为这些案例并没有解决将代码中未使用的库添加到的情况链接并使其失败。
编辑 3:
我环境中的文件(glog 库、log4cpp 库、使用的 log4cpp 标头和 test.cpp):log_test.zip。