重新声明 extern FILE *stderr; libfprintf
Posted
技术标签:
【中文标题】重新声明 extern FILE *stderr; libfprintf【英文标题】:Redeclared extern FILE *stderr; libfprintf 【发布时间】:2020-11-01 03:01:52 【问题描述】:我正在使用 MSYS2 将 libfprintf 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
file=sys.stderr) ^SyntaxError: invalid syntax