游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3695|回复: 9

求救: 无法编译最基本的hello.c. 和名字冲突有关

[复制链接]

11

主题

137

帖子

142

积分

注册会员

Rank: 2

积分
142
发表于 2006-9-27 21:08:00 | 显示全部楼层 |阅读模式
我以前一直在使用linux, 我用的mesa, 那个时候还好好的, 没有什么问题, 但是最近显示器被烧掉了,  所以就在用windows了,
我用的编译器是Dev-c++,  他自己就附带了opengl 的那些库还有头文件(.h), 不过少了一个glut.h, 我后来是用mesa的windows的版本的那个(.zip), 把路径加了进去.
但是我每次一编译, 他就说什么 有名字冲突,  那个HDC, 还有另外的几个. 在glut.h 和windef.h 中 同名存在. 类型不一样,  这个好像和程序内部错误没什么关系, 我不知道该怎么办了, 所以决定, 发贴, 请个位帮我看看, 是怎么回事, 对了, 那个hello.c就是redbook里的那个例子. 在linux是通过了的.

11

主题

137

帖子

142

积分

注册会员

Rank: 2

积分
142
 楼主| 发表于 2006-9-27 21:09:00 | 显示全部楼层

Re:求救: 无法编译最基本的hello.c. 和名字冲突有关

我自己又看了下自己的贴子, 觉的自己好像没讲清,
就是
HDC, 和另外的几个变量, 在 glut.h 和 windef.h 中都有, 但是类型不一样.

27

主题

418

帖子

455

积分

中级会员

Rank: 3Rank: 3

积分
455
QQ
发表于 2006-9-27 23:17:00 | 显示全部楼层

Re:求救: 无法编译最基本的hello.c. 和名字冲突有关

看来你只能自己解决平台移植的问题了。

9

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2006-9-28 11:15:00 | 显示全部楼层

Re:求救: 无法编译最基本的hello.c. 和名字冲突有关

我在Windows下用glut没这个问题啊,在使用glut时不要#include <windows.h>试试看,或者在Visual C下试试~

11

主题

137

帖子

142

积分

注册会员

Rank: 2

积分
142
 楼主| 发表于 2006-9-28 12:22:00 | 显示全部楼层

Re:求救: 无法编译最基本的hello.c. 和名字冲突有关

我觉的这个和平台无关吧,  大概是我犯了一些比较低级的问题, 但确看不出来, 所以我这里把我昨天碰到的所有问题, 代码给大家看下, 是不是我哪里出了问题.

hello.c 那个例子的代码.我就不写了,
出错信息如下:
21 D:\xianwei\mesa_zip\Mesa-6.5.1\progs\demos\gears.c In file included from D:\xianwei\mesa_zip\Mesa-6.5.1\progs\demos\gears.c
134 d:\Dev-Cpp\include\GL\glut.h conflicting types for 'HGLRC'
268 d:\Dev-Cpp\include\windef.h previous declaration of 'HGLRC' was here
135 d:\Dev-Cpp\include\GL\glut.h conflicting types for 'HDC'
267 d:\Dev-Cpp\include\windef.h previous declaration of 'HDC' was here

编译器信息:
Compiler: Default compiler
Executing  gcc.exe...
gcc.exe "D:\xianwei\mesa_zip\Mesa-6.5.1\progs\demos\gears.c" -o "D:\xianwei\mesa_zip\Mesa-6.5.1\progs\demos\gears.exe"   -ansi -pg -g3  -I"d:\Dev-Cpp\include"   -L"d:\Dev-Cpp\lib" -L"D:\xianwei\mesa_zip\lib" -lopengl32 -lglut32 -lglu32 -losmesa32 -lglut -lgmon -pg  -g3
In file included from D:\xianwei\mesa_zip\Mesa-6.5.1\progs\demos\gears.c:21:
d:/Dev-Cpp/include/GL/glut.h:134: error: conflicting types for 'HGLRC'
d:/Dev-Cpp/include/windef.h:268: error: previous declaration of 'HGLRC' was here
d:/Dev-Cpp/include/GL/glut.h:135: error: conflicting types for 'HDC'
d:/Dev-Cpp/include/windef.h:267: error: previous declaration of 'HDC' was hereExecution terminated

11

主题

137

帖子

142

积分

注册会员

Rank: 2

积分
142
 楼主| 发表于 2006-9-28 12:24:00 | 显示全部楼层

Re:求救: 无法编译最基本的hello.c. 和名字冲突有关

我后来想了想用了一种很笨的方法: 就是把那个冲突的变量, 用glut.h中的
typedef void *HGLRC;
typedef void *HDC;

替换了 windef.h中的
DECLARE_HANDLE(HDC);
DECLARE_HANDLE(HGLRC);

我知道这种方法, 相当的愚蠢, 甚至是白痴, 因为有可能导致新的问题. 但是至少是一种方法.

重新编译如下:

出错信息如下:
C:\DOCUME~1\xianwei\LOCALS~1\Temp\cc2Zaaaa.o(.text+0x26) In function `glutInit_ATEXIT_HACK':   [Linker error] undefined reference to `__glutInitWithExit@12'
C:\DOCUME~1\xianwei\LOCALS~1\Temp\cc2Zaaaa.o(.text+0x50) In function `glutCreateWindow_ATEXIT_HACK':   [Linker error] undefined reference to `__glutCreateWindowWithExit@8'
C:\DOCUME~1\xianwei\LOCALS~1\Temp\cc2Zaaaa.o(.text+0x7a) In function `glutCreateMenu_ATEXIT_HACK':    [Linker error] undefined reference to `__glutCreateMenuWithExit@8'
C:\DOCUME~1\xianwei\LOCALS~1\Temp\cc2Zaaaa.o(.text+0x7a) ld returned 1 exit status

编译器信息:
Compiler: Default compiler
Executing  gcc.exe...
gcc.exe "D:\xianwei\mesa_zip\Mesa-6.5.1\progs\demos\gears.c" -o "D:\xianwei\mesa_zip\Mesa-6.5.1\progs\demos\gears.exe"   -ansi -pg -g3  -I"d:\Dev-Cpp\include"   -L"d:\Dev-Cpp\lib" -L"D:\xianwei\mesa_zip\lib" -lopengl32 -lglut32 -lglu32 -losmesa32 -lglut -lgmon -pg  -g3
C:\DOCUME~1\xianwei\LOCALS~1\Temp/ccWOaaaa.o(.text+0x26): In function `glutInit_ATEXIT_HACK':
d:/Dev-Cpp/include/GL/glut.h:535: undefined reference to `__glutInitWithExit@12'C:\DOCUME~1\xianwei\LOCALS~1\Temp/ccWOaaaa.o(.text+0x50): In function `glutCreateWindow_ATEXIT_HACK':
d:/Dev-Cpp/include/GL/glut.h:552: undefined reference to `__glutCreateWindowWithExit@8'C:\DOCUME~1\xianwei\LOCALS~1\Temp/ccWOaaaa.o(.text+0x7a): In function `glutCreateMenu_ATEXIT_HACK':
d:/Dev-Cpp/include/GL/glut.h:598: undefined reference to `__glutCreateMenuWithExit@8'
collect2: ld returned 1 exit statusExecution terminated

11

主题

137

帖子

142

积分

注册会员

Rank: 2

积分
142
 楼主| 发表于 2006-9-28 12:27:00 | 显示全部楼层

Re: Re:求救: 无法编译最基本的hello.c. 和名字冲突有关

starcat2004: Re:求救: 无法编译最基本的hello.c. 和名字冲突有关

我在Windows下用glut没这个问题啊,在使用glut时不要#include <windows.h>试试看,或者在Visual C下试试~

那个#include <windows.h> 我都试过了,连位置都换了好几次.  而至于Visual C ,
第一, 我觉的和这个关系不大,
第二, 我讨厌这个东西. 我要不是因为上不了网.

我没有侮辱你的意思, 我只是发现我不喜欢这个东西而已. 太不方便了, 我向我的同学推荐了 DevC++后, 他们都不用VC了.  对我们学生来说, 我个人感觉他不适合.

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-9-28 17:52:00 | 显示全部楼层

Re:求救: 无法编译最基本的hello.c. 和名字冲突有关

你改变一下include的顺序再编译试试

11

主题

137

帖子

142

积分

注册会员

Rank: 2

积分
142
 楼主| 发表于 2006-9-28 21:32:00 | 显示全部楼层

Re:求救: 无法编译最基本的hello.c. 和名字冲突有关

我弄好了, 我把里面的有几个库的文件给替换了, 而且更换了,头文件, 通过了.

0

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2006-9-28 23:23:00 | 显示全部楼层

Re:求救: 无法编译最基本的hello.c. 和名字冲突有关

慢慢找嘛
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 12:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表