ODR violations caused by protodarwin.h
Including protodarwin.h
in multiple object files causes One Definition Rule violations at link time.
Minimal example:
$ cat bug/file1.cc
#include "protodarwin.h"
int main() { return 0; }
$ cat bug/file2.cc
#include "protodarwin.h"
$ cat bug/CMakeLists.txt
add_executable(bug file1.cc file2.cc)
target_link_libraries(bug DarwinOptions ROOT::Hist)
Result:
/cvmfs/cms.cern.ch/slc7_amd64_gcc10/external/gcc/10.3.0-84898dea653199466402e67d73657f10/bin/../lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../../x86_64-unknown-linux-gnu/bin/ld: CMakeFiles/bug.dir/file2.cc.o: in function `Darwin::Tools::operator<<(std::ostream&, std::pair<unsigned int, unsigned int> const&)':
/cvmfs/cms.cern.ch/slc7_amd64_gcc10/external/boost/1.78.0-22078d9ad44a9ee315c3d0995a7d3746/include/boost/exception/detail/exception_ptr.hpp:166: multiple definition of `Darwin::Tools::operator<<(std::ostream&, std::pair<unsigned int, unsigned int> const&)'; CMakeFiles/bug.dir/file1.cc.o:/nfs/dust/cms/user/mourelou/darwin/Darwin/ProtoDarwin/interface/Looper.h:23: first defined here
/cvmfs/cms.cern.ch/slc7_amd64_gcc10/external/gcc/10.3.0-84898dea653199466402e67d73657f10/bin/../lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../../x86_64-unknown-linux-gnu/bin/ld: CMakeFiles/bug.dir/file2.cc.o:(.bss+0x0): multiple definition of `Darwin::Tools::MetaInfo::origin[abi:cxx11]'; CMakeFiles/bug.dir/file1.cc.o:(.bss+0x0): first defined here
/cvmfs/cms.cern.ch/slc7_amd64_gcc10/external/gcc/10.3.0-84898dea653199466402e67d73657f10/bin/../lib/gcc/x86_64-unknown-linux-gnu/10.3.0/../../../../x86_64-unknown-linux-gnu/bin/ld: CMakeFiles/bug.dir/file2.cc.o:(.bss+0x40): multiple definition of `Darwin::Tools::Options::example[abi:cxx11]'; CMakeFiles/bug.dir/file1.cc.o:(.bss+0x40): first defined here
collect2: error: ld returned 1 exit status