[Wheel-builders] error: signalfd.h not found when building manylinux wheel
Vitaly Kruglikov
vkruglikov at numenta.com
Sat Jul 9 01:33:49 EDT 2016
On 7/8/16, 10:07 PM, "Nathaniel Smith" <njs at pobox.com> wrote:
>On Fri, Jul 8, 2016 at 3:23 PM, Vitaly Kruglikov <vkruglikov at numenta.com>
>wrote:
>> I am attempting to build a manylinux wheel from the nupic.core project
>>in
>> github. I am using the docker image quay.io/pypa/manylinux1_x86_64.
>> nupic.core builds and statically links against the capnproto library,
>>which
>> relies on signalfd.h. Unfortunately, the docker image
>> quay.io/pypa/manylinux1_x86_64 does not provide signalfd.h, so my build
>> fails like this:
>>
>> Linking CXX static library libkj.a
>> [ 27%] Built target kj
>> [ 29%] Building CXX object src/kj/CMakeFiles/kj-async.dir/async.c++.o
>> [ 30%] Building CXX object
>>src/kj/CMakeFiles/kj-async.dir/async-unix.c++.o
>>
>>/nupic.core/build/scripts/ThirdParty/Source/CapnProto/src/kj/async-unix.c
>>++:36:26:
>> fatal error: sys/signalfd.h: No such file or directory
>> #include <sys/signalfd.h>
>>
>> What is the recommended solution for this problem?
>
>man signalfd says:
>
>VERSIONS
> signalfd() is available on Linux since kernel 2.6.22. Working
>support
> is provided in glibc since version 2.8. The signalfd4() system
>call
> (see NOTES) is available on Linux since kernel 2.6.27.
>
>CentOS 5 ships glibc 2.5, so signalfd is simply not available to
>manylinux1 wheels. I guess the recommended solution is to modify your
>code so that it doesn't require signalfd? It looks you aren't the only
>person to run into this this week...
>
> https://groups.google.com/forum/#!topic/capnproto/OpH9RtOBcZU
>
>and the suggestion there is to use -DKJ_USE_EPOLL=0 to tell capnproto
>not to use signalfd.
>
>This is an interesting data point for the benefits of defining a
>CentOS-6-based manylinux2, though...
>
>-n
>
>--
>Nathaniel J. Smith -- https://vorpus.org
Thanks Nathaniel, unfortunately it is not as simple as that.
Unfortunately, capnproto is not my code, so I am somewhat limited in what
I can do with it. You also replied to a similar question concerning pipe2,
SOCK_NONBLOCKING, etc. Those are actually all tied together. I also tried
building capnproto with -DKJ_USE_EPOLL=0 to get around the signalfd
dependency, and that¹s what triggered the pipe2, SOCK_NONBLOCKING, etc.
was not declared in this scope compiler errors. It turns out that pipe2,
etc. are not available on CentOS-5 either. So, -DKJ_USE_EPOLL=0 or not,
the compilation fails due to missing headers or symbols in CentOS-5.
I am now trying to create a patch for captnproto to enable the build to go
through, but it is messy, as other parts of capnproto rely on some of the
related headers. What a mess!
Best,
Vitaly
More information about the Wheel-builders
mailing list