Ошибка: sigjmp_buf не называет тип. При компиляции моего проекта с библиотеками Poco C ++ - PullRequest
0 голосов
/ 22 марта 2020

Я работаю над проектом C ++ под Windows10_x86_64. Я использую библиотеки Poco C ++, установленные с помощью Msys2 для компилятора 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

Я включаю:

-I c: / msys64 / usr / include для setjmp.h и machine / setjmp.h и

-I c: / msys64 / mingw64 / include для заголовков Poco

в мой Makefile, но ошибки не исчезают.

Я не понимаю, где ошибка. Заранее спасибо.

1 Ответ

0 голосов
/ 23 марта 2020

Для компиляции файлов проекта я использовал такие выражения, как:

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

WTF?

Как я уже говорил, я использую Msys2 для переноса этого проекта на MS Windows (мой первый опыт работы с Msys2). И я начал устанавливать каждый пакет вручную: g cc, gdb, make, boost, poco и т. Д. c.

Мое окончательное решение (ПРОБЛЕМА РАЗРЕШЕНА) - удалить 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 за ваш комментарий.

...