对于undefined reference stderr问题的解决

来源:互联网 发布:js正则过滤表情符号 编辑:程序博客网 时间:2024/06/06 03:36

最近在尝试移植某个别人编译好的静态库,在移植过程中出现了未定义的stderr的错误,因此就对以上问题进行了一些简单的研究。

首先来观察以下<stdio.h>中如何对stderr定义,定义如下:

/* Standard streams.  */extern struct _IO_FILE *stdin;/* Standard input stream.  */extern struct _IO_FILE *stdout;/* Standard output stream.  */extern struct _IO_FILE *stderr;/* Standard error output stream.  *//* C89/C99 say they're macros.  Make them happy.  */#define stdin stdin#define stdout stdout#define stderr stderr

通过以上定义可以得知stderr在预处理阶段会被替换为stderr,这一步显然没有什么作用,但此时stderr是在其他文件中定义的struct _IO_FILE *类型的指针,因此stderr也是一个全局符号。

但移植的环境坏就坏在stderr一上来就换成了别的东西,因此根本就没有stderr这个全局符号,也就造成了未定义stderr错误的问题。

对于以上问题解决方式也很简单,首先解除替换stderr

#undef stderr

再定义一个全局符号,并将stderr指向原stderr指向的内容。

把我参考的网站也发给大家。

http://lists.uclibc.org/pipermail/uclibc/2001-July/022610.html

最后和大家说一句,不是一个编译器编译的还真链接不到一块去。

0 0