第三方库包含在项目中时引发编译错误

时间:2020-10-14 16:14:58

标签: c++ cmake visual-studio-2015 protocol-buffers

我正在尝试为程序编写插件,并且正在使用protobuf进行通信。我必须从源代码安装protobuf库,并且这样做没有任何编译错误。但是,分别链接并包括适当的库和头之后,我从protobuf头(如may not be initialized)中收到错误。由于没有未定义的来源,因此似乎链接正确,并且包括intellisense在内的正确信息是在这些文件中找到符号。 我尝试禁用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 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,以防您认为问题出在此。

您能帮我解决此问题吗? 预先感谢

1 个答案:

答案 0 :(得分:0)

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