【问题标题】:Cygwin + windows 10 error "sigfillset was not declared in the scope"Cygwin + Windows 10 错误“未在范围内声明 sigfillset”
【发布时间】:2016-12-10 00:49:22
【问题描述】:

我正在尝试使用 Cygwin 在 Windows 上编译代码。目前,代码在 Linux 上编译成功。 以下是我在 Windows 10 上编译代码所遵循的步骤。

1) 我在我的 Windows 10 机器上安装了 Cygwin。 2)从cygwin的安装包安装gcc、g++、boost。 3) 在环境变量中添加了 cygwin 路径。 当我编译代码时,它会引发以下错误。

usr/include/boost/asio/detail/posix_signal_blocker.hpp: In constructor ‘boost::asio::detail::posix_signal_blocker::posix_signal_blocker()’:
/usr/include/boost/asio/detail/posix_signal_blocker.hpp:42:25: error: ‘sigfillset’ was not declared in this scope
     sigfillset(&new_mask);
                         ^
/usr/include/boost/asio/detail/posix_signal_blocker.hpp: In member function ‘void boost::asio::detail::posix_signal_blocker::block()’:
/usr/include/boost/asio/detail/posix_signal_blocker.hpp:59:27: error: ‘sigfillset’ was not declared in this scope
       sigfillset(&new_mask);
                           ^
In file included from /usr/include/boost/asio/detail/signal_set_service.hpp:213:0,
                 from /usr/include/boost/asio/signal_set_service.hpp:20,
                 from /usr/include/boost/asio/basic_signal_set.hpp:24,
                 from /usr/include/boost/asio.hpp:27,
                 from ../src/app/macl/net/TrxcomInboundReader.h:10,
                 from ../src/app/macl/net/TrxcomInboundReader.cc:1:
/usr/include/boost/asio/detail/impl/signal_set_service.ipp: In member function  boost::system::error_code boost::asio::detail::signal_set_service::add(boost::asio::detail::signal_set_service::implementation_type&, int, boost::system::error_code&)’:
/usr/include/boost/asio/detail/impl/signal_set_service.ipp:266:29: error: ‘sigfillset’ was not declared in this scope
       sigfillset(&sa.sa_mask);
                             ^
/usr/include/boost/asio/detail/impl/signal_set_service.ipp:267:44: error: no matching function for call to ‘sigaction::sigaction(int&, sigaction*, int)’
       if (::sigaction(signal_number, &sa, 0) == -1)
                                            ^
In file included from /usr/include/sys/signal.h:112:0,
                 from /usr/include/signal.h:6,
                 from /usr/include/pthread.h:12,
                 from /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/include/c++/x86_64-pc-cygwin/bits/gthr-default.h:35,
                 from /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/include/c++/x86_64-pc-cygwin/bits/gthr.h:148,
                 from /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/include/c++/ext/atomicity.h:35,
                 from /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/include/c++/bits/basic_string.h:39,
                 from /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/include/c++/string:52,
                 from /usr/include/boost/core/demangle.hpp:14,
                 from /usr/include/boost/core/typeinfo.hpp:119,
                 from /usr/include/boost/detail/sp_typeinfo.hpp:20,
                 from /usr/include/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp:27,
                 from /usr/include/boost/smart_ptr/detail/sp_counted_base.hpp:5 ,
                 from /usr/include/boost/smart_ptr/detail/shared_count.hpp:29,
                 from /usr/include/boost/smart_ptr/shared_ptr.hpp:28,
                 from /usr/include/boost/shared_ptr.hpp:17,
                 from ../src/app/macl/net/TrxcomInboundReader.h:8,
                 from ../src/app/macl/net/TrxcomInboundReader.cc:1:
/usr/include/cygwin/signal.h:317:8: note: candidate: sigaction::sigaction()
 struct sigaction
        ^
/usr/include/cygwin/signal.h:317:8: note:   candidate expects 0 arguments, 3 provided
/usr/include/cygwin/signal.h:317:8: note: candidate: sigaction::sigaction(const sigaction&)
/usr/include/cygwin/signal.h:317:8: note:   candidate expects 1 argument, 3 provided
In file included from /usr/include/boost/asio/detail/signal_set_service.hpp:213:0,
                 from /usr/include/boost/asio/signal_set_service.hpp:20,
                 from /usr/include/boost/asio/basic_signal_set.hpp:24,
                 from /usr/include/boost/asio.hpp:27,

让我知道你的建议。

【问题讨论】:

    标签: c++ windows gcc boost g++


    【解决方案1】:

    如果您查看 Cygwin 的 signal.h,您会看到 sigactionsigfillset(您的错误消息中提到的两个函数丢失)是在防护内定义的:

    #if __BSD_VISIBLE || __XSI_VISIBLE >= 4
    

    这两个名称带有双下划线,表示您不应该直接自己设置它们。所以请参阅features.h,它会解释更多。

    因此,您需要在编译命令中添加以下两项之一:

    -D_XOPEN_SOURCE_EXTENDED
    

    或者

    -D_GNU_SOURCE
    

    或者

    -D_BSD_SOURCE
    

    然后,Boost 将可以使用缺少的功能。您的代码中可能有一些定义抢占了上述内容 - 例如,如果您在任何可能阻止其工作的地方定义了 _POSIX_SOURCE

    【讨论】:

    • 感谢 -D_GNU_SOURCE 取得了进展。现在,我被困在无法找到 libftdi1 和 libboost Linking test_app /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../x86_64-pc 的链接阶段-cygwin/bin/ld: 找不到 -llibftdi1 /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../x86_64-pc-cygwin/bin/ld:找不到-lboost_program_options /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../x86_64-pc-cygwin/bin/ld:找不到-lboost_thread collect2:错误: ld 返回 1 个退出状态 make: *** [Makefile.test:105: bin/testl_app] 错误 1
    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2015-06-23
    相关资源
    最近更新 更多