第三方库在包含在项目中时抛出编译错误

Third party library throwing compilation errors when being included in project

我正在尝试为程序编写一个插件,并且我正在使用 protobuf 进行通信。我必须从源代码安装 protobuf 库,并且没有任何编译错误。但是,在我 link 并分别包含适当的库和 headers 之后,我收到来自 protobuf headers 的错误,例如 may not be initialized。它似乎 linking 是正确的,因为没有未定义的来源,并且正确地包括智能感知正在找到这些文件中的符号。 我试过禁用 treat warnings as errorssdl 编译器标志,但这些并没有解决我的问题。 澄清一下,问题是:

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 库并包含刚刚构建和安装的目录时,它们会出现。这让我想到了如上所述的标志解决方案。 在我的顶级 CMakeLists 中,我有

    FIND_PACKAGE(Protobuf EXACT 3.13.0.0 REQUIRED PATHS "$ENV{ProgramW6432}/protobuf")

成功获取了protobuf的lib和include 在我的子目录中,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}
)

不过,我认为问题出在编译器配置或这种性质的问题上,我包括了我的 cmakelists,以防你认为问题在于此。

你能帮我解决这个问题吗? 提前致谢

感谢大家的回答。问题是我安装了两个库,只有一个在工作。因此,在删除混乱的一个并修复我的 cmake 变量之后,我能够编译我的插件。