PROTOBUF_INLINE_NOT_IN_HEADERS

Я пытаюсь установить Open Transactions, проект с открытым исходным кодом, на debian 8. Я установил все зависимости и у меня возникла проблема при компиляции (make). Следующая ошибка отображается на моем терминале, хотя я и установил проект protobuf:

In file included from /root/opentxs/src/../include/opentxs/core/OTStoragePB.hpp:64:0,
                 from /root/opentxs/src/core/OTStorage.cpp:47:
/root/opentxs/build/src/core/otprotob/Generics.pb.h:501:6: error: "PROTOBUF_INLINE_NOT_IN_HEADERS" is not defined [-Werror=undef]
 #if !PROTOBUF_INLINE_NOT_IN_HEADERS
      ^
In file included from /root/opentxs/src/../include/opentxs/core/OTStoragePB.hpp:65:0,
                 from /root/opentxs/src/core/OTStorage.cpp:47:
/root/opentxs/build/src/core/otprotob/Markets.pb.h:2062:6: error: "PROTOBUF_INLINE_NOT_IN_HEADERS" is not defined [-Werror=undef]
 #if !PROTOBUF_INLINE_NOT_IN_HEADERS
      ^
In file included from /root/opentxs/src/../include/opentxs/core/OTStoragePB.hpp:66:0,
                 from /root/opentxs/src/core/OTStorage.cpp:47:
/root/opentxs/build/src/core/otprotob/Bitcoin.pb.h:833:6: error: "PROTOBUF_INLINE_NOT_IN_HEADERS" is not defined [-Werror=undef]
 #if !PROTOBUF_INLINE_NOT_IN_HEADERS
      ^
In file included from /root/opentxs/src/../include/opentxs/core/OTStoragePB.hpp:67:0,
                 from /root/opentxs/src/core/OTStorage.cpp:47:
/root/opentxs/build/src/core/otprotob/Moneychanger.pb.h:1026:6: error: "PROTOBUF_INLINE_NOT_IN_HEADERS" is not defined [-Werror=undef]
 #if !PROTOBUF_INLINE_NOT_IN_HEADERS
      ^
cc1plus: all warnings being treated as errors
src/core/CMakeFiles/opentxs-core.dir/build.make:1368: recipe for target 'src/core/CMakeFiles/opentxs-core.dir/OTStorage.cpp.o' failed
make[2]: *** [src/core/CMakeFiles/opentxs-core.dir/OTStorage.cpp.o] Error 1
make[2]: Leaving directory '/root/opentxs/build'
CMakeFiles/Makefile2:586: recipe for target 'src/core/CMakeFiles/opentxs-core.dir/all' failed
make[1]: *** [src/core/CMakeFiles/opentxs-core.dir/all] Error 2
make[1]: Leaving directory '/root/opentxs/build'
Makefile:150: recipe for target 'all' failed
make: *** [all] Error 2

Есть идеи как с этим бороться? Не удалось найти какую-либо помощь онлайн.

2 ответа

Решение

У меня была такая же проблема на Ubuntu 14.04, и я исправил ее, как вы сказали. Но я просто пишу, чтобы объяснить больше проблемы.
Итак, после поиска ошибки я нашел это обсуждение. В котором они описывают, что проблема возникает из-за того, что кодеры Google полагаются на тот факт, что стандарт C++ позволяет обрабатывать неопределенный символ препроцессора как оценку 0. Таким образом, существует множество директив #if, проверяющих значение PROTOBUF_INLINE_NOT_IN_HEADERS когда это нигде не определено; это законно и должно рассматриваться как ноль.
Я исправил это, добавив -DPROTOBUF_INLINE_NOT_IN_HEADERS=0 в CCFLAGS в верхнем уровне SConstruct и CXXFLAGS в src/SConscript (CXXFLAGS), и это, казалось, поймало это.

Поэтому, чтобы это исправить, вы должны добавить эту строку в CMakeList.txt, который вы найдете в главной папке opentxs:

add_definitions (-DPROTOBUF_INLINE_NOT_IN_HEADERS = 0)

И не забудьте повторить cmake шаг

Надеюсь, что это более понятно и полезно.

Исправлено, добавив эту строку вверху CMakelists.txt

add_definitions(-DPROTOBUF_INLINE_NOT_IN_HEADERS=0)
Другие вопросы по тегам