QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: zhoujc

一个奇怪的问题,请高手帮忙解决一下

[复制链接]
 楼主| 发表于 2004-7-27 09:20:06 | 显示全部楼层
我按照你说的改了,可是还是出现那个错误啊
那样改以后,在你的机上可以正常运行,并画点吗?
回复

使用道具 举报

 楼主| 发表于 2004-7-27 09:32:38 | 显示全部楼层
我甚至把教程上的那段画点函数复制下来,在我机上运行还是出现错误,不过这次是显示
"段错误"中文的,哈哈
回复

使用道具 举报

发表于 2004-7-27 10:35:34 | 显示全部楼层
虽然不懂sdl,但你的surface那初始化的,没初始化能直接用吗?
回复

使用道具 举报

发表于 2004-7-27 23:49:10 | 显示全部楼层
在我的机器上能正常运行并画点,当然了,要用SDL_Delay()延迟一下,不然一闪就没了,看不到画出来的点。
回复

使用道具 举报

 楼主| 发表于 2004-7-28 09:25:28 | 显示全部楼层
谢谢
难道不同的机运行同样的程序还会出不同的结果???好郁闷
请问你用的是9.0吗?我的是fedora core
最后在你机上能正常运行的程序是不是下面这一段
#include <stdlib.h>
#include <SDL.h>
void putpixel(SDL_Surface *surface,int x,int y,Uint32 color);
SDL_Surface *screen;
int x;
int y;
Uint32 color;
SDL_Surface *surface;
main()
{ int i;
if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
fprintf(stderr, "无法初始化SDL: %s\n", SDL_GetError());
exit(1);}
screen=SDL_SetVideoMode(640,480,16,SDL_SWSURFACE);
color=SDL_MapRGB(screen->format,200,200,200);
for(i=0;i<10;i++){putpixel(surface, x,y,color);
x+=2;
y+=2;}}
void putpixel(SDL_Surface *surface,int x,int y,Uint32 color)
{
Uint16 *bufp;
if(SDL_MUSTLOCK(surface)){
if(SDL_LockSurface(surface)<0)return;
}
bufp=(Uint16 *)surface->pixels+y*surface->pitch/2+x;
*bufp=color;
SDL_UpdateRect(surface,x,y,1,1);
if(SDL_MUSTLOCK(surface))
{SDL_UnlockSurface(surface);}}
回复

使用道具 举报

 楼主| 发表于 2004-7-28 09:56:00 | 显示全部楼层
我在一部装了9.0的机上运行这个程序,结果编译都没有通过,出了好多错误
好像都是/usr/lib/gcc-lib/i386-redhat-linux有问题
undefine reference to 'pthred_creat'等等
我试过把自己机上的这个文件夹拷过去,可是文件夹里面很多文件居然不能拷贝
回复

使用道具 举报

发表于 2004-7-28 13:35:04 | 显示全部楼层
首先程序中就有错,“for(i=0;i<10;i++){putpixel(surface, x,y,color);”应写成“for(i=0;i<10;i++){putpixel(screen, x,y,color);”,在函数putpixel()中的surface是形参,但你在程序中调用它时就得用实参!  全局定义中的SDL_Surface *surface是多余的。

编译命令为:gcc -lSDL -I/usr/include/SDL your-code.c -o your-exec-name

先把基础的C例程掌握好,然后再写一些更深入的代码。
回复

使用道具 举报

 楼主| 发表于 2004-7-28 18:49:32 | 显示全部楼层
问题解决了,谢谢!!!!
为什么段错误编译可以通过呢?这样很难检查啊!
我自己又从新写了一个程序,又是段错误.段错误主要是由什么引起的呢?比方说我上面那个程序就是因为调用子函数时使用了形参,还有其他什么可能会引起段错误呢
回复

使用道具 举报

发表于 2004-7-29 09:18:03 | 显示全部楼层
[quote:3d901a6280="zhoujc"]问题解决了,谢谢!!!!
为什么段错误编译可以通过呢?这样很难检查啊!
[/quote]

段错误是程序代码有问题,导致程序在执行时访问了不该访问的内存(好像是这样吧? 版主请指正)而导致错误,和编译无关
如果编译器连你程序的运行错误也能检测出来,那还用调试程序吗
回复

使用道具 举报

 楼主| 发表于 2004-7-29 09:35:54 | 显示全部楼层
说的也是,不过这样搞得我好郁闷,又不知道是哪个地方出错.编程基础也不太好,一写程序就是段错误,现在看到那句话就有阴影 :-(
回复

使用道具 举报

 楼主| 发表于 2004-7-29 21:48:03 | 显示全部楼层
我的程序已经可以正常显示汉字了
可是把这个程序放到另一部装9.0的机上编译就不能通过(我用的是fedora core)
显示下面的错误
gcc -lSDL -I/usr/include/SDL -o test test.c
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `pthread_create'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `pthread_cancel'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `sem_destroy'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `sem_wait'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `sem_post'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `sem_init'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `pthread_sigmask'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `sem_trywait'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `pthread_mutexattr_init'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `sem_getvalue'
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../libSDL.so: undefined reference
to `pthread_join'
collect2: ld returned 1 exit status
请问这是什么问题,有什么办法能解决吗?(我试过把自己机上的这个文件夹拷过去,可是不行)
回复

使用道具 举报

发表于 2004-7-30 13:36:49 | 显示全部楼层
加个 -lpthread 参数
回复

使用道具 举报

 楼主| 发表于 2004-7-30 15:41:24 | 显示全部楼层
搞定了,谢谢斑竹
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 18:18 , Processed in 0.086773 second(s), 13 queries .

© 2021 Powered by Discuz! X3.5.

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