当前位置: 技术问答>linux和unix
为什么编译c库函数总是出现大量的语法错误?错误都是产生在C库函数的头文件。
来源: 互联网 发布时间:2015-05-16
本文导语: 到底是这些库函数的头文件有问题还是gcc,g++编译器有问题?? 我的gcc是2.96版的 | gcc2.96版有bug 附录 E -- 开发者的眼泪 总在mplayer-users邮件列表上引起巨大争吵和怒火的主题主要有两个。第...
到底是这些库函数的头文件有问题还是gcc,g++编译器有问题??
我的gcc是2.96版的
我的gcc是2.96版的
|
gcc2.96版有bug
附录 E -- 开发者的眼泪
总在mplayer-users邮件列表上引起巨大争吵和怒火的主题主要有两个。第一个主题是关于
E.1 GCC 2.96
背景:GCC2.95系列是GNU官方发行版而GCC的2.95.3版本是这个系列中bug最少的。我们从来没有遇到过可以归罪于GCC 2.95.3的编译问题。从RedHat Linux 7.0开始,Red Hat在他们的发行版里包括了一个打满补丁的CVS版本的GCC,命名为2.96。Red Hat在他的发行版中包括这个版本是因为当时GCC 3.0还没有完成,而他们需要一个在所有他们支持的平台上,包括IA64和s390都正常工作的编译器。Linux发行版Mandrake也照着Red Hat的例子开始在他们的Linux-Mandrake 8.0系列中搭载GCC 2.96。
声明:GCC小组否认于GCC 2.96有任何联系并对GCC 2.96发表了一份官方回应。世界各地的开发者开始遇到GCC 2.96的问题,并开始推荐其他的编译程序。Apache,MySQL,avifile和Wine。其他你会感兴趣的链接有:Real time Linux,Linux kernel news flash about kernel 2.4.17和Voy Forum。MPlayer同样经受这些时有时无的只要换个不同版本的GCC就可以全部解决的问题。有些项目开始为一些2.96的问题实现绕过的方法,但是我们拒绝修正别人的bug,尤其是其中一些绕过的方法意味着降低性能。
你能在这个站点的读到故事的另一面。GCC 2.96不允许在汇编程序中出现|(管道)字符因为它同时支持 Intel和AT&T的语法而|字符在Intel版本中是个符号。问题是它一声不吭的忽略了整个汇编程序块。这个问题现在应该被修正了,GCC会显示一个警告而不是直接跳过。
现状:Red Hat说2.96-85以上的GCC都已经修正了。情况确实好了很多,但我们在我们的邮件列表里仍然遇到一些换了编译器之后就不存在了的问题。在任何情况下它都不再重要了。希望一个成熟的GCC 3.x将很好的解决这个问题。如果你想要用2.96编译的话在configure的时候加上--disable-gcc-checking 标记。记住你要自己负责而且不要报告任何bug。如果你报告,你只会被我们的邮件列表封掉,因为对于GCC 2.96我们已经有够多的争吵了。请让它平息下来。
如果你的GCC 2.96有问题,你能从Red Hat的ftp服务器得到2.96-85的包,或者直接去找7.2或更高版本里面提供的 3.0.4的包。你也能用gcc-3.2-10的包(非官方的,但是工作地不错)和你能把他们跟你已经有的2.96 装在一起。MPlayer检测到它并用3.2-10代替2.96。如果你不想要或者无法使用二进制包,下面教你怎么从源代码编译最新的GCC:
去GCC镜像页网页并下载gcc-core-XXX.tar.gz。XXX是版本号。里面包括了完整的C编译器程序,对MPlayer是足够了。如果你也想要C++,Java或其它一些GCC的高级特性gcc-XXX.tar.gz可能更适合你。
附录 E -- 开发者的眼泪
总在mplayer-users邮件列表上引起巨大争吵和怒火的主题主要有两个。第一个主题是关于
E.1 GCC 2.96
背景:GCC2.95系列是GNU官方发行版而GCC的2.95.3版本是这个系列中bug最少的。我们从来没有遇到过可以归罪于GCC 2.95.3的编译问题。从RedHat Linux 7.0开始,Red Hat在他们的发行版里包括了一个打满补丁的CVS版本的GCC,命名为2.96。Red Hat在他的发行版中包括这个版本是因为当时GCC 3.0还没有完成,而他们需要一个在所有他们支持的平台上,包括IA64和s390都正常工作的编译器。Linux发行版Mandrake也照着Red Hat的例子开始在他们的Linux-Mandrake 8.0系列中搭载GCC 2.96。
声明:GCC小组否认于GCC 2.96有任何联系并对GCC 2.96发表了一份官方回应。世界各地的开发者开始遇到GCC 2.96的问题,并开始推荐其他的编译程序。Apache,MySQL,avifile和Wine。其他你会感兴趣的链接有:Real time Linux,Linux kernel news flash about kernel 2.4.17和Voy Forum。MPlayer同样经受这些时有时无的只要换个不同版本的GCC就可以全部解决的问题。有些项目开始为一些2.96的问题实现绕过的方法,但是我们拒绝修正别人的bug,尤其是其中一些绕过的方法意味着降低性能。
你能在这个站点的读到故事的另一面。GCC 2.96不允许在汇编程序中出现|(管道)字符因为它同时支持 Intel和AT&T的语法而|字符在Intel版本中是个符号。问题是它一声不吭的忽略了整个汇编程序块。这个问题现在应该被修正了,GCC会显示一个警告而不是直接跳过。
现状:Red Hat说2.96-85以上的GCC都已经修正了。情况确实好了很多,但我们在我们的邮件列表里仍然遇到一些换了编译器之后就不存在了的问题。在任何情况下它都不再重要了。希望一个成熟的GCC 3.x将很好的解决这个问题。如果你想要用2.96编译的话在configure的时候加上--disable-gcc-checking 标记。记住你要自己负责而且不要报告任何bug。如果你报告,你只会被我们的邮件列表封掉,因为对于GCC 2.96我们已经有够多的争吵了。请让它平息下来。
如果你的GCC 2.96有问题,你能从Red Hat的ftp服务器得到2.96-85的包,或者直接去找7.2或更高版本里面提供的 3.0.4的包。你也能用gcc-3.2-10的包(非官方的,但是工作地不错)和你能把他们跟你已经有的2.96 装在一起。MPlayer检测到它并用3.2-10代替2.96。如果你不想要或者无法使用二进制包,下面教你怎么从源代码编译最新的GCC:
去GCC镜像页网页并下载gcc-core-XXX.tar.gz。XXX是版本号。里面包括了完整的C编译器程序,对MPlayer是足够了。如果你也想要C++,Java或其它一些GCC的高级特性gcc-XXX.tar.gz可能更适合你。
|
把错误贴出来一点点看看,
很可能是编译时没有包含某些库,
所以头文件里的函数没有定义......
很可能是编译时没有包含某些库,
所以头文件里的函数没有定义......
|
这种错误,我也碰到过,具体情况记不清了,
要看以下你的代码和编译命令
要看以下你的代码和编译命令
|
把头文件的次序改变一下,看看
或者
g++ -Wall -c *.cpp
或者
g++ -Wall -c *.cpp
|
应该还是你自己头文件的问题。拿出来看看吧。
|
可能是你的头文件有问题。
检查一下你的头文件所包括的格式吧。很可能是哪儿的差一个或者多一个括号什么的。我以前就遇见过。
检查一下你的头文件所包括的格式吧。很可能是哪儿的差一个或者多一个括号什么的。我以前就遇见过。
|
ddd