2016-12-10 3 views
0

CygwinでWindows上でコードをコンパイルしようとしています。現在、コードはLinux上で正常にコンパイルされます。 Windows 10でコードをコンパイルする手順は次のとおりです。Cygwin + windows 10エラー "sigfillsetがスコープ内で宣言されていませんでした。"

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, 

あなたの提案を教えてください。

答えて

4

あなたはCygwinのsignal.hを見ればあなたがsigactionsigfillsetは(二つの機能あなたのエラーメッセージが不足していると言う)ガード内で定義されていることがわかります。

#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 

これら二つの名前を示すために、二重強調されています自分で直接設定することはできません。だから詳細を説明しているfeatures.hを参照してください。

ですから、あなたのコンパイルコマンドにこれらの2つのうちの1つを追加する必要があります。

-D_XOPEN_SOURCE_EXTENDED 

それとも

-D_GNU_SOURCE 

それとも

-D_BSD_SOURCE 

その後行方不明の機能が利用できるようになりますブースト。例えば、_POSIX_SOURCEが定義されていて、それが動作しなくなったような場合など、コードをどこかで定義することができます。

+0

ありがとう-D_GNU_SOURCEが進捗しました。今、私はlibftdi1とlibboostを見つけることができない段階にリンクしています。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 – user1867459