gcc on Ubuntu 16.04: Undefined reference on google::InitGoogleLogging and google::ParseCommandLineFlags
Eingetragen von fayon am 24 Jan 2019 in Arbeit
I tried to compile a C++ program that was pimped by using the gflags and glog libraries. I installed them by apt-get install libgflags-dev libgoogle-glog-dev. When linking the executable, I got undefined reference errors like
mssj.o: In Funktion `main': mssj.cpp:(.text.startup+0x131): Nicht definierter Verweis auf `google::InitGoogleLogging(char const*)' mssj.cpp:(.text.startup+0x145): Nicht definierter Verweis auf `google::ParseCommandLineFlags(int*, char***, bool)' mssj.cpp:(.text.startup+0x346): Nicht definierter Verweis auf `google::LogMessageFatal::LogMessageFatal(char const*, int)' mssj.cpp:(.text.startup+0x34e): Nicht definierter Verweis auf `google::LogMessage::stream()' mssj.cpp:(.text.startup+0x356): Nicht definierter Verweis auf `google::LogMessageFatal::~LogMessageFatal()' mssj.cpp:(.text.startup+0x476): Nicht definierter Verweis auf `google::LogMessageFatal::LogMessageFatal(char const*, int)' mssj.cpp:(.text.startup+0x480): Nicht definierter Verweis auf `google::LogMessage::stream()' mssj.cpp:(.text.startup+0x48a): Nicht definierter Verweis auf `google::LogMessageFatal::~LogMessageFatal()' mssj.o: In Funktion `_GLOBAL__sub_I__ZN3fLS16FLAGS_input_fileB5cxx11E': mssj.cpp:(.text.startup+0xd8c): Nicht definierter Verweis auf `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)' mssj.cpp:(.text.startup+0xdc7): Nicht definierter Verweis auf `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)' mssj.cpp:(.text.startup+0xe37): Nicht definierter Verweis auf `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)' mssj.cpp:(.text.startup+0xe72): Nicht definierter Verweis auf `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)' mssj.cpp:(.text.startup+0xe9f): Nicht definierter Verweis auf `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)' collect2: error: ld returned 1 exit status
The issue was the call of the linker. It expects shared library files to appear AFTER the executable using them, so instead of g++ -lgflags -lglog MANY.o-FILES -o EXECUTABLE it wants the libraries at the end. g++ MANY.o-FILES -o EXECUTABLE -lgflags -lglog solved the problem.
Dieser Eintrag wurde eingetragen von fayon und ist abgelegt unter Arbeit.
Noch kein Feedback
Formular wird geladen...