当前位置: 技术问答>linux和unix
奇怪的编译问题,请指教!
来源: 互联网 发布时间:2015-12-13
本文导语: 我最近做一个移植的项目,从SCO+informix7.3移植到AIX 5.3+ids9,过程中碰到了令人抓狂的问题。在这里贴出来请大家分析下可能是什么原因 在原来的程序中,定义了许多头文件,为了编成方便,定义了一个大的头文件,像...
我最近做一个移植的项目,从SCO+informix7.3移植到AIX 5.3+ids9,过程中碰到了令人抓狂的问题。在这里贴出来请大家分析下可能是什么原因
在原来的程序中,定义了许多头文件,为了编成方便,定义了一个大的头文件,像这样的:
cat tools.h
#include "a.h"
#include "b.h"
#include "c.h"
...
然后在应用程序中#include "tools.h"就行了。
然而在aix中编译时总是报一些匪夷所思的错误。比如说a.h中的某一行漏了分号,或者是b.h中的某个结构定义非法等,但实际上是没有错误的,最让人faint的是有时候汇报 “cur_strs" is not a member of struct ....,靠,头文件中定义的结构根本就没有 cur_strs这个成员,最后实在没招了,我试着在.c文件中直接
#include "a.h"
#include "b.h"
...
居然编译过了,而且运行也正常。
这到底怎么回事?还请高人指点!谢谢!!!
在原来的程序中,定义了许多头文件,为了编成方便,定义了一个大的头文件,像这样的:
cat tools.h
#include "a.h"
#include "b.h"
#include "c.h"
...
然后在应用程序中#include "tools.h"就行了。
然而在aix中编译时总是报一些匪夷所思的错误。比如说a.h中的某一行漏了分号,或者是b.h中的某个结构定义非法等,但实际上是没有错误的,最让人faint的是有时候汇报 “cur_strs" is not a member of struct ....,靠,头文件中定义的结构根本就没有 cur_strs这个成员,最后实在没招了,我试着在.c文件中直接
#include "a.h"
#include "b.h"
...
居然编译过了,而且运行也正常。
这到底怎么回事?还请高人指点!谢谢!!!
|
检查环境变量的路径,是不是有一个默认的头文件重名造成的?
|
很大的可能是重名文件吧..........
学习..MARK
学习..MARK
|
1, gcc -v ... ...将输出比较详细的信息,看看gcc默认的搜索路径都有哪些.
2, 对所有的.c文件使用 cpp 预编译,如:
cpp main.c > main.i
将会把所有#开头的进行预编译.他会将所有#include 所包含的头文件里的内容插入到.c文件里。
这样就可以很清楚看到错误出在哪里了
2, 对所有的.c文件使用 cpp 预编译,如:
cpp main.c > main.i
将会把所有#开头的进行预编译.他会将所有#include 所包含的头文件里的内容插入到.c文件里。
这样就可以很清楚看到错误出在哪里了
|
学习