2014-05-10 7 views
5

Próbowałem skonfigurować glog biblioteki rejestrowania google dla mojej aplikacji C++, ale nie mogę znaleźć żadnych informacji o tym, jak faktycznie go uruchomić, a komunikaty o błędach są mniejsze niż pomocny.Skonfiguruj google glog i gflags dla C++

To jest kod przykładowy, który próbuję wykonać, i wykonuję ./myapp --v=2, ale otrzymuję komunikat "BŁĄD: nieznana flaga wiersza polecenia" v "". Czy jest jakaś dokumentacja dla tej biblioteki lub czy ktoś wie jak ją poprawnie skonfigurować?

#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

dokumentacja w http://google-glog.googlecode.com/svn/trunk/doc/glog.html nie wspomina swoją rozmowę na 'Google :: P arseCommandLineFlags (& argc, & argv, true); '... co się stanie, jeśli tego nie dodasz? – mah

+0

Jeśli nie uwzględnię tego kodu, nie jest wykonywane przetwarzanie wiersza polecenia i nie jest włączone rejestrowanie. "Dokumentacja" google-glog odwołuje się do "dokumentacji" gflags, gdzie to wezwanie jest wymieniane. – user3235200

+1

Najpierw najlepiej najpierw wywołać 'ParseCommandLineFlags', ponieważ dowolne flagi' glog' nie będą działać (na przykład '--logtostderr = true') do momentu przeanalizowania flag wiersza poleceń. – phoenix

Odpowiedz

7

Glôg potrzebuje GFlags skompilowane w „google” nazw zamiast teraz domyślnej przestrzeni nazw „GFlags”.

Aby ustawić ten obszar nazw, należy skompilować i zainstalować pliki gflags ze źródła i ustawić zmienną GFLAGS_NAMESPACE na "google".

Oto kroki, które zrobiłem w Kubuntu 14.04 i powinny być podobne do tego, co powinieneś zrobić w Mac OSX. Spowoduje to umieszczenie źródła GFlags w katalogu/usr/local/src i zainstalowanie biblioteki w katalogach/usr/local/lib & obejmujących katalogi. Ostatnie polecenie (ldconfig) rejestruje bibliotekę w systemie.

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 

Alternatywnie można zastosować następującą poprawkę w źródle głóg (dołączony w ostatniej odpowiedzi):

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

Zasadniczo wykorzystuje przestrzeń nazw GFlags po obejmuje na teście GLogs jednostkowej pliki źródłowe tak:

#ifdef HAVE_LIB_GFLAGS 
#include <gflags/gflags.h> 
using namespace gflags; 
#endif 
Powiązane problemy