Beim Erstellen meines Projekts erhalte ich die folgende Fehlermeldung. Leider kann ich keinen Sinn daraus machen.Linker Mehrfachdefinitionsfehler: Warum scheint <thread> meine Funktionen zu definieren?
CMakeFiles/xxx.dir/xxx/send_dummy_events.cc.o: In function `std::chrono::duration_values<long>::zero()':
/usr/include/c++/6/thread:311: multiple definition of `POLONAISE::xxx::dispatch_event(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
CMakeFiles/xxx.dir/xxx/main.cc.o:/home/manuel/projects/projectname/build_x86_64/package/xxx/send_dummy_events.cc:10: first defined here
CMakeFiles/xxx.dir/xxx/send_dummy_events.cc.o: In function `std::chrono::duration<long, std::ratio<1l, 1000000000l> >::count() const':
/usr/include/c++/6/thread:311: multiple definition of `POLONAISE::xxx::send_dummy_events()'
CMakeFiles/xxx.dir/xxx/main.cc.o:/home/manuel/projects/projectname/build_x86_64/package/xxx/send_dummy_events.cc:16: first defined here
Mir scheint dies als /usr/include/c++/6/thread
würde meine Funktionsnamen dispatch_event()
und send_dummy-event()
neu definieren.
Die Quelle meiner send_dummy_events.cc
ist dies:
#include <chrono>
#include <thread>
#include "POLONAISE/logging.h"
#include "POLONAISE/EventQueue.h"
namespace POLONAISE {
namespace xxx {
void dispatch_event(std::string serialized_uirequest __attribute__((unused)))
{
}
void send_dummy_events()
{
std::chrono::seconds delay(3);
while (1) {
std::this_thread::sleep_for(delay);
}
}
}
}
Die Quelle usr/include/c++/6/thread
ist dies: (Sie, nicht durch die Zeilennummern verwechselt werden habe ich vergessen, wie sie in Vim auszuschalten.)
/// sleep_for
2 template<typename _Rep, typename _Period>
1 inline void
311 sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
1 {
2 if (__rtime <= __rtime.zero())
3 return;
4 auto __s = chrono::duration_cast<chrono::seconds>(__rtime);
5 auto __ns = chrono::duration_cast<chrono::nanoseconds>(__rtime - __s);
6 #ifdef _GLIBCXX_USE_NANOSLEEP
7 __gthread_time_t __ts =
8 {
9 static_cast<std::time_t>(__s.count()),
10 static_cast<long>(__ns.count())
11 };
12 while (::nanosleep(&__ts, &__ts) == -1 && errno == EINTR)
13 { }
14 #else
15 __sleep_for(__s, __ns);
16 #endif
17 }
Mehrere Definitionsfehler bedeuten normalerweise, dass Sie Code in einer Header-Datei definiert haben, die keine Wächter enthält, oder Sie fügen eine Quelldatei in eine andere Datei ein. – NathanOliver
@NathanOliver Include Guards hilft nicht, wenn die Header-Datei in verschiedenen Quelldateien enthalten ist. –
@Someprogrammerdude Wahr, aber es tut nicht weh, sie zu haben, für den Fall, dass sie in die Kette eingeschlossen sind, ohne zu merken, dass sie es sind. – NathanOliver