0

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

このコマンドは失敗します (ライブラリの順序を変更します):

$ 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

4

0 に答える 0