代码之家  ›  专栏  ›  技术社区  ›  jplc

错误:sigjmp_buf未命名类型。使用Poco C++库编译我的项目时

  •  -1
  • jplc  · 技术社区  · 5 年前

    我正在Windows10_x86_64下进行一个C++项目。 我使用的是使用Msys2安装的Poco C++库,用于MinGW64编译器。 我的项目的所有依赖项都已使用Msys2成功安装。

    然而,当我试图编译我的项目时,我遇到了下一个错误:

    In file included from /mingw64/include/Poco/Thread_POSIX.h:23,
                 from /mingw64/include/Poco/Thread.h:35,
                 from /mingw64/include/Poco/ThreadPool.h:22,
                 from /mingw64/include/Poco/ActiveStarter.h:22,
                 from /mingw64/include/Poco/ActiveMethod.h:24,
                 from /mingw64/include/Poco/AbstractEvent.h:25,
                 from /mingw64/include/Poco/BasicEvent.h:21,
                 from /mingw64/include/Poco/Util/AbstractConfiguration.h:25,
                 from /mingw64/include/Poco/Util/LoggingConfigurator.h:24,
                 from ../../prompt/common/PLogger.h:41,
                 from PLogger.cpp:15:
    /mingw64/include/Poco/SignalHandler.h:80:2: error: 'sigjmp_buf' does not name a type; did you mean 'jmp_buf'?
       80 |  sigjmp_buf& jumpBuffer();
          |  ^~~~~~~~~~
          |  jmp_buf
    /mingw64/include/Poco/SignalHandler.h:99:3: error: 'sigjmp_buf' does not name a type; did you mean 'jmp_buf'?
       99 |   sigjmp_buf buf;
          |   ^~~~~~~~~~
          |   jmp_buf
    

    在查看SignalHandler.h后,我看到这个文件包括:

    #include <setjmp.h>
    

    该文件包括:

    #include <machine/setjmp.h>
    

    其定义了sigjmp_buf:

    /* POSIX sigsetjmp/siglongjmp macros */
    #ifdef _JBTYPE
    typedef _JBTYPE sigjmp_buf[_JBLEN+1+((sizeof (_JBTYPE) + sizeof (sigset_t) - 1)
                         /sizeof (_JBTYPE))];
    #else
    typedef int sigjmp_buf[_JBLEN+1+(sizeof (sigset_t)/sizeof (int))];
    #endif
    

    我包括:

    -Ic:/msys64/usr/include 对于setjmp.h和machine/setjmp.h

    -Ic:/msys64/mingw64/include Poco头球

    进入我的Makefile,但错误仍然存在。

    我不明白错误在哪里。 提前感谢。

    0 回复  |  直到 5 年前
        1
  •  2
  •   jplc    5 年前

    为了编译项目文件,我使用了以下语句:

    g++ -o ../../../../target/build/debug/PLogger.o PLogger.cpp -I../../ -std=c++14 -Werror -pedantic -Wall -Wformat -Winline -Wunused -g -D_DEBUG -DPCOM_EXPORTS -fpic -c
    

    我通过删除以下内容来解决此错误: -标准偏差=c++14 选项。然而,我遇到了一个新的错误:

    relocation truncated to fit: R_X86_64_PC32 against undefined symbol
    

    世界跆拳道联盟?

    正如我之前所说,我正在使用Msys2将此项目移植到MS Windows(这是我第一次使用Msys 2)。我开始手动安装每个软件包: gcc、gdb、make、boost、poco等。

    我的最终解决方案(问题已解决)是卸载Msys2,从我的计算机中删除所有文件。重新安装,然后首先:

    $ pacman -Syu
    $ pacman -Su
    $ pacman -S mingw-w64-x86_64-toolchain    -> instead of install manually gcc
    ...
    $ pacman -S mingw-w64-x86_64-poco
    $ pacman -S git
    

    现在一切都很好。 感谢@CookieButter的评论。