我正在尝试从i686-pc-linux-gnu为armv7-unknown-nto-qnx交叉编译NTP。
到目前为止,我已经建立了以下命令:
CC=/opt/qnx660/host/linux/x86/usr/bin/qcc LD=/opt/qnx660/host/linux/x86/usr/bin/ntoarmv7-ld CFLAGS="-static -Vgcc_ntoarmv7le" ../configure --host=armv7-unknown-nto-qnx --build=i686-pc-linux-gnu --prefix=$(pwd)/output --with-yielding-select=yes
这似乎能带我大部分时间;但是,编译器最终会抛出../../../sntp/libevent/signal.c:255:17: error: 'SA_RESTART' undeclared (first use in this function)
。在SA_RESTART的此实例以及所有其他实例中,配置定义的常量HAVE_SIGACTION if定义了问题代码。通过查看config.log,我发现了这一点:
configure:24569: checking for sigaction
17307configure:24569: /opt/qnx660/host/linux/x86/usr/bin/qcc -std=gnu99 -std=gnu99 -o conftest -static -Vgcc_ntoarmv7le conftest.c -lsocket >&5
17308configure:24569: $? = 0
17309configure:24569: result: yes
我认为这是一个误报。
我正在寻找一种通过进一步指定环境来更正./configure测试的方法,或者是一种指定测试结果的方法。
我知道我可以在自动测试后修改config.h,但这不是我的应用程序的有效解决方案。
答案 0 :(得分:0)
SA_RESTART
。仅支持SA_NOCLDSTOP
和SA_SIGINFO
。
有关更多信息,请参见以下参考:http://www.qnx.com/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fs%2Fsigaction.html
答案 1 :(得分:0)
要禁用sigaction的功能检查,请在调用configure之前在您的环境中导出ac_cv_func_sigaction = no。
但是,这里的配置没有任何问题-QNX确实支持sigaction(),因此配置正确返回了“是”。这是libevent中的一个错误,它假定所有支持sigaction()的操作系统也都支持SA_RESTART,而这在QNX上并非如此。 sigaction在ntp软件的其他位置使用,并且全面禁用所有sigaction调用可能会产生意外的副作用。相反,我建议您考虑修补libevent以获得适当的QNX支持。 QNX的优秀人才通过他们的pkgsrc树available here提供了一个补丁。