重新声明 extern FILE *stderr; libfprintf

Posted

技术标签:

【中文标题】重新声明 extern FILE *stderr; libfprintf【英文标题】:Redeclared extern FILE *stderr; libfprintf 【发布时间】:2020-11-01 03:01:52 【问题描述】:

我正在使用 MSYS2libfprintf v1.90.3 移植到 Windows 明威-w64。 本项目使用 NBIS 库 (NIST) 中的 bozorth3 算法。 他们对 nbis 库进行了一些更改,在 bozorth.h 头文件中他们重新声明了标准错误

/* Global supporting error reporting */
extern FILE *stderr;

我不明白为什么在Linux中编译时没有编译错误但在Windows中出现下一个错误:

../libfprint/nbis/include/bozorth.h:221:14:错误:预期 数字常量 221 之前的声明说明符或 '...' |外部 文件 *stderr;

在 Linux 中没有发生编译错误会发生什么?

谢谢。

【问题讨论】:

stderr (and the other standard streams) 的实现是实现定义的。唯一可以保证的是result 的类型为FILE *。换句话说,这意味着stderr 可以是一个,它可以扩展为函数调用或数组解引用。 【参考方案1】:

定义stderr 的唯一认可方法是包含stdio.h

我不知道为什么库重新声明 stderr,但解决方案是删除该行,如果您在某处得到 stderr 的缺失声明,请添加 #include <stdio.h>

他们可能对errno 做了同样愚蠢的事情。如果您稍后发现errno 的声明,也将其删除。

【讨论】:

以上是关于重新声明 extern FILE *stderr; libfprintf的主要内容,如果未能解决你的问题,请参考以下文章

vs2017.unresolved external symbol __imp__fprintf&__imp____iob_func

如何将 stdout、stderr 重新路由回 /dev/tty

repo file=sys.stderr 错误解决

file=sys.stderr) ^SyntaxError: invalid syntax

file=sys.stderr) ^SyntaxError: invalid syntax

file descriptor 0 1 2 一切皆文件 stdout stderr stdin