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.
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.