当我使用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
此命令失败(更改libs的顺序):
$ 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 libs,log4cpp libs,log4cpp header和test.cpp):log_test.zip。