Некоторые библиотеки в Boost 1.69 не совместимы с MacOS? - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь скомпилировать программу, у которой не было проблем при компиляции с Ubuntu 18.04 и Windows 10. Однако, когда я пытаюсь скомпилировать ее на OSX High Sierra, у меня появляются ошибки, и они связаны только с надстройкой.

Это пример:

#include <boost/process.hpp>
#include <iostream>

int main()
{
  std::cout << "This is a test." << std::endl;
}

Затем я попытался скомпилировать программу с g++ и clang следующим образом:

g++ -std=c++11 test.cpp -lpthread

Затем я получаюэта огромная ошибка:

In file included from test.cpp:1:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:21:
In file included from /usr/local/include/boost/process/detail/child_decl.hpp:30:
/usr/local/include/boost/process/detail/posix/wait_for_exit.hpp:60:7: error: expected unqualified-id
    ::sigemptyset(&sigset);
      ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/signal.h:125:26: note: expanded from macro 'sigemptyset'
#define sigemptyset(set)        (*(set) = 0, 0)
                                ^
In file included from test.cpp:1:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:21:
In file included from /usr/local/include/boost/process/detail/child_decl.hpp:30:
/usr/local/include/boost/process/detail/posix/wait_for_exit.hpp:61:7: error: expected unqualified-id
    ::sigaddset(&sigset, SIGCHLD);
      ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/signal.h:122:31: note: expanded from macro 'sigaddset'
#define sigaddset(set, signo)   (*(set) |= __sigbits(signo), 0)
                                ^
In file included from test.cpp:1:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:21:
In file included from /usr/local/include/boost/process/detail/child_decl.hpp:30:
/usr/local/include/boost/process/detail/posix/wait_for_exit.hpp:87:26: error: no member named 'sigtimedwait' in the global namespace
        auto ret_sig = ::sigtimedwait(&sigset, nullptr, &ts);
                       ~~^
In file included from test.cpp:1:
In file included from /usr/local/include/boost/process.hpp:25:
In file included from /usr/local/include/boost/process/group.hpp:32:
/usr/local/include/boost/process/detail/posix/wait_group.hpp:64:7: error: expected unqualified-id
    ::sigemptyset(&sigset);
      ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/signal.h:125:26: note: expanded from macro 'sigemptyset'
#define sigemptyset(set)        (*(set) = 0, 0)
                                ^
In file included from test.cpp:1:
In file included from /usr/local/include/boost/process.hpp:25:
In file included from /usr/local/include/boost/process/group.hpp:32:
/usr/local/include/boost/process/detail/posix/wait_group.hpp:65:7: error: expected unqualified-id
    ::sigaddset(&sigset, SIGCHLD);
      ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/signal.h:122:31: note: expanded from macro 'sigaddset'
#define sigaddset(set, signo)   (*(set) |= __sigbits(signo), 0)
                                ^
In file included from test.cpp:1:
In file included from /usr/local/include/boost/process.hpp:25:
In file included from /usr/local/include/boost/process/group.hpp:32:
/usr/local/include/boost/process/detail/posix/wait_group.hpp:90:17: error: no member named 'sigtimedwait' in the global namespace
        ret = ::sigtimedwait(&sigset, nullptr, &ts);
              ~~^
6 errors generated.

Я мог пропустить флаг компилятора, я пробовал -lboost_system, но это дало те же точные ошибки.Если эта конкретная библиотека не совместима с OSX, я постараюсь найти обходной путь, но эта библиотека уже встроена в код, с которым я сейчас работаю.

Есть ли известные исправления для этого?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы правы. По состоянию на 1.69.0 Boost.Process не работает на MacOS. Для получения подробной информации перейдите по ссылке на отчет об ошибке.

В отчете об ошибке приведен обходной путь, чтобы получить его.компиляция в MacOS:

Оказывается, что MacOS не единственная платформа, которая определяет sigemptyset, sigaddset.Это легко исправить, поскольку все, что вам нужно сделать, это удалить квалификатор ::.Что касается sigtimedwait, это тоже не распространено на всех платформах.Странно, если удалить из него спецификатор ::, то получится код для компиляции.Я предполагаю, что шаблон никогда не создается, поэтому тот факт, что метод не завершается, не вызывает у нас проблем.

Я могу предоставить патч, но это не более чем удаление :: из этих 3 идентификаторов.

Комплексный патч включен в проект Flint .Обратите внимание, что Flint имеет лицензию MIT, если вы решите включить их патч в ваш код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...