2014-05-10 5 views
5

Ho cercato di configurare la gloria della libreria di registrazione di Google per la mia applicazione C++, ma non riesco a trovare alcuna informazione su come farlo funzionare e i messaggi di errore sono inferiori a utile.Configura google glog e gflags per C++

Questo è il codice di esempio che sto cercando di eseguire, e sto eseguendo ./myapp --v=2, ma ottengo "ERRORE: sconosciuto flag della riga di comando 'v'". C'è qualche documentazione per questa libreria, o qualcuno sa come configurarlo correttamente?

#include <glog/logging.h> 
#include <gflags/gflags.h> 

int main(int argc, char** argv) { 
    google::InitGoogleLogging(argv[0]); 
    google::ParseCommandLineFlags(&argc, &argv, true); 

    VLOG(1) << "I'm printed when you run the program with --v=1 or higher"; 
    VLOG(2) << "I'm printed when you run the program with --v=2 or higher"; 
    return 0; 
} 
+0

La documentazione a http://google-glog.googlecode.com/svn/trunk/doc/glog.html non menziona la chiamata a 'google :: P arseCommandLineFlags (& argc, & argv, true); '... cosa succede se non lo includi? – mah

+0

Se non si include quel codice, non viene eseguita l'analisi della riga di comando e nessuna registrazione è abilitata. La "documentazione" di google-glog fa riferimento alla "documentazione" di gflag in cui tale chiamata è menzionata – user3235200

+1

Inoltre, è meglio chiamare prima "ParseCommandLineFlags", poiché qualsiasi flag specifico di "glog' non avrà effetto (ad esempio' --logtostderr = true') finché non vengono analizzati i flag della riga di comando. – phoenix

risposta

7

Glog bisogno GFlags compilati nello spazio dei nomi "google" al posto dello spazio dei nomi ormai di default "gflags".

Per impostare questo spazio dei nomi devi compilare e installare gflags dal sorgente e impostare la variabile GFLAGS_NAMESPACE su "google".

Ecco i passaggi che ho seguito in Kubuntu 14.04 e dovrebbero essere simili a ciò che dovresti fare in Mac OSX. Questi posizioneranno il sorgente GFlags in/usr/local/src e installeranno la libreria nelle directory include/usr/local/lib &. L'ultimo comando (ldconfig) registra la libreria nel sistema.

cd /usr/local/src/ 
cp /path/to/downloaded/gflags-2.1.1.tar.gz . 
sudo tar xzf gflags-2.1.1.tar.gz 
cd /tmp 
mkdir buildgflags 
cd buildgflags 
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=ON \ 
-DGFLAGS_NAMESPACE=google -G"Unix Makefiles" /usr/local/src/gflags-2.1.1/ 
make 
sudo make install 
sudo ldconfig 

In alternativa è possibile applicare la seguente patch nel sorgente Glog (in allegato l'ultima replica):

https://code.google.com/p/google-glog/issues/detail?id=194

Esso utilizza fondamentalmente lo spazio dei nomi gflags dopo la include nella prova di unità GLOG file di origine in questo modo:

#ifdef HAVE_LIB_GFLAGS 
#include <gflags/gflags.h> 
using namespace gflags; 
#endif