pthread_mutex_t に問題があります。静的フィールド pthread_mutex_t を作成しようとすると、静的関数で初期化し、最終的にいくつかのクラス メソッド内で使用すると、次のような多くのエラーが発生します。
main.o: In function `LogWriter::initialize(pthread_mutex_t*)':
main.cpp:(.text._ZN9LogWriter10initializeEP15pthread_mutex_t[LogWriter::initialize(pthread_mutex_t*)]+0x7): undefined reference to `LogWriter::mutex'
簡略化されたクラス コード:
class LogWriter{
static pthread_mutex_t mutex;
static void initialize(pthread_mutex_t *mut){
LogWriter::mutex = PTHREAD_MUTEX_INITIALIZER;
//if(pthread_mutex_init(&(LogWriter::mutex), NULL) != 0){
//init failed
//}
}
public:
static LogWriter getInstance(string module_name){
LogWriter instance(module_name);
return instance;
}
LogWriter& operator<<(string a);
};
私の質問は次のとおりです。なぜですか?通常の (静的ではない) フィールドとして定義すれば、何の問題もないことはわかっています。グーグルも検索しましたが、これにリンクされている資料は見つかりませんでした。また、静的な pthread_mutex へのポインターを作成し、main 関数で初期化すると、このように終了します。