Search code examples
c++protocol-buffers

Compiling Application with libprotobuf, Conflicting declaration of Functions


I am attempting to compile a simple application on linux, linking it with Protocol Buffers library. I get the following error during compilation:

In file included from /usr/include/x86_64-linux-gnu/sys/types.h:176,
                 from /usr/include/stdlib.h:394,
                 from /usr/include/c++/9/cstdlib:75,
                 from /home/bdn/Programming/boost-1.79.0-amd64/include/boost/config/platform/linux.hpp:15,
                 from /home/bdn/Programming/boost-1.79.0-amd64/include/boost/config.hpp:57,
                 from /home/bdn/Programming/boost-1.79.0-amd64/include/boost/program_options/config.hpp:10,
                 from /home/bdn/Programming/boost-1.79.0-amd64/include/boost/program_options/options_description.hpp:11,
                 from /home/bdn/Programming/boost-1.79.0-amd64/include/boost/program_options.hpp:15,
                 from /home/bdn/Programming/Beaglebone/source/software/appconfig.hpp:15,
                 from /home/bdn/Programming/Beaglebone/source/software/appconfig.cpp:12:
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:98:17: error: conflicting declaration of C function ‘uint32_t google::protobuf::internal::little_endian::FromHost(uint32_t)’
   98 | inline uint32_t FromHost(uint32_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:90:17: note: previous declaration ‘uint16_t google::protobuf::internal::little_endian::FromHost(uint16_t)’
   90 | inline uint16_t FromHost(uint16_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:106:17: error: conflicting declaration of C function ‘uint64_t google::protobuf::internal::little_endian::FromHost(uint64_t)’
  106 | inline uint64_t FromHost(uint64_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:98:17: note: previous declaration ‘uint32_t google::protobuf::internal::little_endian::FromHost(uint32_t)’
   98 | inline uint32_t FromHost(uint32_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:106:17: error: conflicting declaration of C function ‘uint64_t google::protobuf::internal::little_endian::FromHost(uint64_t)’
  106 | inline uint64_t FromHost(uint64_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:90:17: note: previous declaration ‘uint16_t google::protobuf::internal::little_endian::FromHost(uint16_t)’
   90 | inline uint16_t FromHost(uint16_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:122:17: error: conflicting declaration of C function ‘uint32_t google::protobuf::internal::little_endian::ToHost(uint32_t)’
  122 | inline uint32_t ToHost(uint32_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:114:17: note: previous declaration ‘uint16_t google::protobuf::internal::little_endian::ToHost(uint16_t)’
  114 | inline uint16_t ToHost(uint16_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:130:17: error: conflicting declaration of C function ‘uint64_t google::protobuf::internal::little_endian::ToHost(uint64_t)’
  130 | inline uint64_t ToHost(uint64_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:122:17: note: previous declaration ‘uint32_t google::protobuf::internal::little_endian::ToHost(uint32_t)’
  122 | inline uint32_t ToHost(uint32_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:130:17: error: conflicting declaration of C function ‘uint64_t google::protobuf::internal::little_endian::ToHost(uint64_t)’
  130 | inline uint64_t ToHost(uint64_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:114:17: note: previous declaration ‘uint16_t google::protobuf::internal::little_endian::ToHost(uint16_t)’
  114 | inline uint16_t ToHost(uint16_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:150:17: error: conflicting declaration of C function ‘uint32_t google::protobuf::internal::big_endian::FromHost(uint32_t)’
  150 | inline uint32_t FromHost(uint32_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:142:17: note: previous declaration ‘uint16_t google::protobuf::internal::big_endian::FromHost(uint16_t)’
  142 | inline uint16_t FromHost(uint16_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:158:17: error: conflicting declaration of C function ‘uint64_t google::protobuf::internal::big_endian::FromHost(uint64_t)’
  158 | inline uint64_t FromHost(uint64_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:150:17: note: previous declaration ‘uint32_t google::protobuf::internal::big_endian::FromHost(uint32_t)’
  150 | inline uint32_t FromHost(uint32_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:158:17: error: conflicting declaration of C function ‘uint64_t google::protobuf::internal::big_endian::FromHost(uint64_t)’
  158 | inline uint64_t FromHost(uint64_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:142:17: note: previous declaration ‘uint16_t google::protobuf::internal::big_endian::FromHost(uint16_t)’
  142 | inline uint16_t FromHost(uint16_t value) {
      |                 ^~~~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:174:17: error: conflicting declaration of C function ‘uint32_t google::protobuf::internal::big_endian::ToHost(uint32_t)’
  174 | inline uint32_t ToHost(uint32_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:166:17: note: previous declaration ‘uint16_t google::protobuf::internal::big_endian::ToHost(uint16_t)’
  166 | inline uint16_t ToHost(uint16_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:182:17: error: conflicting declaration of C function ‘uint64_t google::protobuf::internal::big_endian::ToHost(uint64_t)’
  182 | inline uint64_t ToHost(uint64_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:174:17: note: previous declaration ‘uint32_t google::protobuf::internal::big_endian::ToHost(uint32_t)’
  174 | inline uint32_t ToHost(uint32_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:182:17: error: conflicting declaration of C function ‘uint64_t google::protobuf::internal::big_endian::ToHost(uint64_t)’
  182 | inline uint64_t ToHost(uint64_t value) {
      |                 ^~~~~~
/home/bdn/Programming/protobuf_amd64/include/google/protobuf/endian.h:166:17: note: previous declaration ‘uint16_t google::protobuf::internal::big_endian::ToHost(uint16_t)’
  166 | inline uint16_t ToHost(uint16_t value) {
      |                 ^~~~~~
make[2]: *** [source/software/CMakeFiles/xmbedSw.dir/build.make:76: source/software/CMakeFiles/xmbedSw.dir/appconfig.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:283: source/software/CMakeFiles/xmbedSw.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

The functions appear to be in 2 separate namespaces within the endian.h file. This file is apart of the PB headers. Is there a flag somewhere I need to set to get past this? Do I need to rebuild librotobuf? I am using protoc version 3.21.2 with GNU C and CXX compilers at 9.4.0.


Solution

  • It turns out a simple CMakeLists file variable being misspelled was the root cause 'sources' vs 'source'. The error cause here created cascading errors leading to the above error, from the looks of it.