使用额外库时失败链接

时间:2015-08-11 16:00:29

标签: c++ compiler-errors linker pthreads log4cplus

当我使用glog库(Google的日志库,代码中未使用)构建一个简单的C ++程序时,我会收到“未定义的引用”错误。当我从构建命令中删除-lglog时,链接成功。

请注意,我添加到链接的库根本没有在代码中使用,尽管它导致构建失败。此外,gloglog4cpp库应该是独立的。

你能解释这种不寻常的行为吗?

环境: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

0 个答案:

没有答案