免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2866 | 回复: 9
打印 上一主题 下一主题

为什么gcc会偷懒 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-31 18:27 |只看该作者 |倒序浏览
一份程序,在linux 以及freeebsd下面编译运行都没有问题,拿到mingw下编译就会出错,gcc的版本是相同的,最后发现是在预编译阶段,mingw上的gcc对t头文件中宏定义的替换不够彻底,结果编译程序的时候,不是死在预编译阶段就是死在编译阶段了。怀疑是参数的问题,不知道哪位知道

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2008-08-31 19:05 |只看该作者
程序长不长?不长的话就贴出来

论坛徽章:
0
3 [报告]
发表于 2008-08-31 21:13 |只看该作者

回复 #2 cjaizss 的帖子

好几个文件,很长。主要是几个头文件。

论坛徽章:
0
4 [报告]
发表于 2008-08-31 21:14 |只看该作者

回复 #2 cjaizss 的帖子

我也是耐着心,整了一天,才发现了问题的所在。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2008-08-31 22:08 |只看该作者
把Makefile贴出来吧

论坛徽章:
0
6 [报告]
发表于 2008-09-01 12:57 |只看该作者

回复 #5 cjaizss 的帖子

老大,你很执着呀。我的makfile很简单的:
include ../../Makefile.dqp

#设置库等环境变量值
PG_DIR=${DQP_DIR}/bin
PG_INCLUDE=../include
PG_LIB=${PG_DIR}/lib

#设置编译的标志
CC = gcc

CFLAG=   -fPIC -w  -g -shared

PG_CFLAGS=-I${PG_INCLUDE} -L${PG_LIB}  

DCFLAGS= ${CFLAG} ${PG_CFLAGS} -o

#OBJ = .o        # .o , .obj
#WrapperFun_Obj = IgniteWrapperFun${OBJ}

DLLLIB = .dll        # .dll , .so
WrapperFun_Dll = libignite_wrapper_libpqipc${DLLLIB}

AllTasks = clean PgsqlWrapper copy

all{AllTasks}
       
clean:
#        rm -f *${OBJ}
        rm -f *${DLLLIB}
        rm -f ./*.bak

copy:
        cp -f ./${WrapperFun_Dll} ../../bin/lib/${WrapperFun_Dll}
PgsqlWrapper:
        ${CC} ${DCFLAGS} ${WrapperFun_Dll} IgniteWrapperFun.c WrapperFunSocket.c IgniteWrapperFunWork.c  -lc -lrt -ldl -lpostgres -lwsock32
包含的那个makefile.dqp中就只把DQP_DIR设置为了一个目录,没有其他的内容。这个makefile文件在linux freebsd下都没有问题的。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2008-09-01 15:29 |只看该作者
make结果长什么样子?

论坛徽章:
0
8 [报告]
发表于 2008-09-01 20:04 |只看该作者

回复 #7 cjaizss 的帖子

In file included from ../include/postgres.h:49,
                 from WrapperFunCommunication.h:25,
                 from IgniteWrapperFun.c:1:
../include/utils/elog.h:226: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
In file included from ../include/postgres.h:49,
                 from WrapperFunCommunication.h:25,
                 from WrapperFunSocket.c:1:
../include/utils/elog.h:226: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
In file included from ../include/postgres.h:49,
                 from WrapperFunCommunication.h:25,
                 from IgniteWrapperFunWork.c:1:
../include/utils/elog.h:226: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
make: *** [PgsqlWrapper] Error 1

论坛徽章:
0
9 [报告]
发表于 2008-09-01 20:13 |只看该作者

回复 #7 cjaizss 的帖子

用gcc -E处理了那个报错的头文件,发现是错误出现在这个样一条语句:
extern DLLIMPORT ErrorContextCallback *error_context_stack;
其中DLLIMPORT 是一个宏,最终是要替换成空格的,而 ErrorContextCallback这个宏是 应该被替换成int *。结果gcc居然无动于衷,所以编译器报错,说在*这个符号之前应该出现一个,;=等等的符号,结果却没有遇见。。。。。。。。。。。。。。。。。。。。。我很无语,在Linux以及freebsd的下面是没有这样的问题的。

[ 本帖最后由 rsuhkoi 于 2008-9-1 20:18 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2008-09-02 08:59 |只看该作者
原帖由 rsuhkoi 于 2008-9-1 20:13 发表
用gcc -E处理了那个报错的头文件,发现是错误出现在这个样一条语句:
extern DLLIMPORT ErrorContextCallback *error_context_stack;
其中DLLIMPORT 是一个宏,最终是要替换成空格的,而 ErrorContextCallbac ...

可能是不满足它的编译条件,设计这个工程的人不打算你什么地方都可以编译通过,有些地方他不想让你编译通过。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP