我正在尝试为程序编写插件,并且正在使用protobuf进行通信。我必须从源代码安装protobuf库,并且这样做没有任何编译错误。但是,分别链接并包括适当的库和头之后,我从protobuf头(如may not be initialized
)中收到错误。由于没有未定义的来源,因此似乎链接正确,并且包括intellisense在内的正确信息是在这些文件中找到符号。
我尝试禁用treat warnings as errors
和sdl
编译器标志,但是这些不能解决我的问题。
要澄清,问题是:
static constexpr int kMessageSetMessageNumber = 3;
说may not be initialized
和
static const int kMessageSetItemStartTag = GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(
kMessageSetItemNumber, WireFormatLite::WIRETYPE_START_GROUP);
其中must be a constant expression
。
而且,再次在VS2015中从源代码构建时,不会出现这些错误;它们在我尝试使用protobuf lib时出现,并且包含刚刚构建和安装的目录。这使我想到了如上所述的标志解决方案。
在我的顶层CMakeList中,我有
FIND_PACKAGE(Protobuf EXACT 3.13.0.0 REQUIRED PATHS "$ENV{ProgramW6432}/protobuf")
成功获取lib并包含protobuf 在我的子目录中,CMakeLists是
project(ZMQReceiverV2)
add_library(${PROJECT_NAME} STATIC
./ZMQReceiverV2.cpp
./ZMQReceiverV2.h
)
target_link_libraries(${PROJECT_NAME}
...
${Protobuf_LIBRARY}
libprotobuf
libprotobuf-lite
libprotoc
)
target_include_directories(${PROJECT_NAME}
SYSTEM PUBLIC
...
PUBLIC ${protobuf_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
)
尽管如此,但我认为问题是编译器配置或这种性质的,所以我包含了cmakelist,以防您认为问题出在此。
您能帮我解决此问题吗? 预先感谢
答案 0 :(得分:0)
感谢大家的回答。问题是我有两次安装该库,而只有一个正在运行。因此,在删除了一个混乱的问题并修复了我的cmake变量之后,我便能够编译我的插件了。