0

我正在尝试从 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 ifdef 会排除问题代码。查看 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,但这不是我的应用程序的有效解决方案。

4

2 回答 2

0

SA_RESTARTQNX 不支持。仅支持SA_NOCLDSTOPSA_SIGINFO

有关更多信息,请参阅此参考:http ://www.qnx.com/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fs%2Fsigaction.html

于 2019-06-07T08:59:41.223 回答
0

要禁用 sigaction 的功能检查,请在调用 configure 之前在您的环境中导出 ac_cv_func_sigaction=no。

但是,此处的配置没有任何问题——QNX 确实支持 sigaction(),因此配置正确返回“是”。这是 libevent 中的一个错误,它假设所有支持 sigaction() 的操作系统也支持 SA_RESTART,这在 QNX 上是不正确的。sigaction 在 ntp 软件的其他地方使用,并且全面禁用所有 sigaction 调用可能会产生意想不到的副作用。相反,我建议您考虑修补 libevent 以获得正确的 QNX 支持;QNX 的优秀人员通过他们的 pkgsrc 树提供了一个补丁,可在此处获得

于 2019-06-09T14:41:11.090 回答