protocolbuffers / protobuf

Protocol Buffers - Google's data interchange format
http://protobuf.dev
Other
65.34k stars 15.45k forks source link

Compile for VxWorks (gcc 4.3.3) without tr1 support with CMake. Use hash/set from boost? #5485

Closed trondhe closed 5 years ago

trondhe commented 5 years ago

Compiling protobuf with a gcc 4.3 compiler seems to assume that the tr1 namespace is available following code in hash.h. The VxWorks compiler I am using does not support it which creates some issues. Cf. this link after running ./configure one can use the generated config.h file to replace the hash/set types with boosts version. As I am using CMake on both Windows and Linux, there does not seem to be a similar easy path to replace it with than modifying the source? The file is a bit cryptic for me, so if there is something I have overlooked, or anyone has a smart solution, I am all ears!

acozzette commented 5 years ago

GCC 4.3.3 is almost 10 years old, so I suspect it's going to be hard to get things working on such an old compiler. I assume you must also be using an older version of protobuf as well, since we require C++11 starting from protobuf 3.6. The ideal solution would be to use a newer compiler, but if that's not possible then you may have to just modify the source to get things working.

trondhe commented 5 years ago

Yeah I am aware, it is a limitation due to Windriver not supporting some hardware sadly. I am using Protobuf 3.5 which does not require C++11, but does use tr1.

trondhe commented 5 years ago

I have now gotten the lite version of protobuf to build for VxWorks 6.9 which seemed to compile fine with some small changes to some headers and sources due to different named functions. The older boost libraries (<1.66) does contain an wrapper implementation of tr1 which maybe could be used to get the full version working. The lite version covers all requirements so I will not try to get the full library to compile.

qinglanyu commented 2 years ago

I have now gotten the lite version of protobuf to build for VxWorks 6.9 which seemed to compile fine with some small changes to some headers and sources due to different named functions. The older boost libraries (<1.66) does contain an wrapper implementation of tr1 which maybe could be used to get the full version working. The lite version covers all requirements so I will not try to get the full library to compile.

hi, trondhe. i'm also trying to compile protobuf-lite for vxworks 6.8, but something wrong troubled me for a long time. could you give me some help?

when i test protobuf-lite for vxworks 6.8 running on P2020, it goes into a infinite loop of ASM instructions at function GoogleOnceInitImpl in once.cc line 66. i use protobuf 3.5.1