Error: sigjmp_buf does not name a type. When Compiling my project with Poco C++ libraries
Error: sigjmp_buf does not name a type. When Compiling my project with Poco C++ libraries
我正在 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 for setjmp.h and machine/setjmp.h and
-Ic:/msys64/mingw64/include 用于 Poco headers
进入我的 Makefile,但错误仍然存在。
我不明白哪里出错了。
提前致谢。
为了编译项目文件,我使用了如下语句:
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
我解决了这个错误删除:-std=c++14 选项。但是我得到了一个新的错误:
relocation truncated to fit: R_X86_64_PC32 against undefined symbol
卧槽?
正如我之前所说,我正在使用 Msys2 将此项目移植到 MS Windows(我第一次使用 Msys2)。然后我开始手动安装每个包:
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 的评论。
我正在 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 for setjmp.h and machine/setjmp.h and
-Ic:/msys64/mingw64/include 用于 Poco headers
进入我的 Makefile,但错误仍然存在。
我不明白哪里出错了。 提前致谢。
为了编译项目文件,我使用了如下语句:
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
我解决了这个错误删除:-std=c++14 选项。但是我得到了一个新的错误:
relocation truncated to fit: R_X86_64_PC32 against undefined symbol
卧槽?
正如我之前所说,我正在使用 Msys2 将此项目移植到 MS Windows(我第一次使用 Msys2)。然后我开始手动安装每个包: 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 的评论。