QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1187|回复: 11

SDL新手一问!谢谢!

[复制链接]
发表于 2004-5-18 17:10:59 | 显示全部楼层 |阅读模式
我编了一个简单的程序测试SDL:

#include "SDL/SDL.h"
#include<stdio.h>
#include<stdlib.h>

int main(int argc,char*argv[]){
        printf("wufeng");
        if(SDL_Init(SDL_INIT_VIDEO)<0){
                fprintf(stderr,"SDL:%s\n",SDL_GetError());
                exit(1);
        }
        atexit(SDL_Quit);
}
当我编译时出现如下错误:

/tmp/ccsSYHgx.o(.text+0x26): In function `main':
: undefined reference to `SDL_Init'
/tmp/ccsSYHgx.o(.text+0x3: In function `main':
: undefined reference to `SDL_GetError'
/tmp/ccsSYHgx.o(.text+0x61): In function `main':
: undefined reference to `SDL_Quit'
collect2: ld returned 1 exit status

我已经在/etc/ld.so.conf中添加了/usr/lib和/usr/local/lib
发表于 2004-5-18 20:37:44 | 显示全部楼层
gcc -lSDL *.c
回复

使用道具 举报

 楼主| 发表于 2004-5-18 21:46:47 | 显示全部楼层
还是不行
回复

使用道具 举报

发表于 2004-5-18 23:16:45 | 显示全部楼层
gcc -lSDL -L/usr/lib -lpthread  
就可以  我试过了
回复

使用道具 举报

发表于 2004-5-18 23:24:34 | 显示全部楼层
试一下
gcc *.c `sdl-config --cflags --libs`

注意,` 是和~号在同一个键上


或者,
把SDL的头文件,像SDL.h  SDL_image.h ......都拷到你的*.c 所在的目录
(一般在 /usr/include/SDL/ 下)

忘记说了, 把你源程序里开始的第一行的
#include<SDL/SDL.h>
改为#include"SDL.h"

然后把/usr/lib/libSDL.so拷过来
然后 gcc -c XXX.c
gcc libSDL.so XXX.o  -o XXX

你试试看
回复

使用道具 举报

发表于 2004-5-19 09:25:04 | 显示全部楼层
运行结果是怎么样的?怎么只输出一个字符串?
回复

使用道具 举报

发表于 2004-5-19 09:36:27 | 显示全部楼层
[quote:de30b066d0="CHENSG"]运行结果是怎么样的?怎么只输出一个字符串?[/quote]
除了printf,他的程序里也没有别的动作呀
回复

使用道具 举报

发表于 2004-5-19 10:27:41 | 显示全部楼层
刚看明白,你第一行写的是
#include "SDL/SDL.h"

现在换成
#include <SDL.h> 或者#include <SDL/SDL.h> (应该都可以编译成功的) 再试试看, 因该能解决问题


如果要看到一些结果, 试着加入一下代码, 首先任意找一张bmp图片,比方说是background.bmp

代码更改如下
[code:1]
#include <SDL.h>
#include<stdio.h>
#include<stdlib.h>

int main(int argc,char*argv[]){

SDL_Surface * screen;   //添加1
SDL_Surface * background;  //添加2
SDL_Rect sourceRect,  destinationRect; //添加3

printf("wufeng");
if(SDL_Init(SDL_INIT_VIDEO)<0){
fprintf(stderr,"SDL:%s\n",SDL_GetError());
exit(1);
}
atexit(SDL_Quit);

/*以下部分是添加的代码,显示一张bmp图片*/

//设置显示分辨率,和颜色深度,以及显示模式
screen = SDL_SetVideoMode( 640,480,16,0);
if(screen==NULL){
    printf("Unable to set video mode: %s\n", SDL_GetError());
    return 1;
}

//载入一张bmp图片
background = SDL_LoadBMP("background.bmp");
if(background==NULL){
     printf("Unable to load bmp: %s\n", SDL_GetError());
     return 1;
}

//设置原始图象大小
sourceRect.x = 0;
sourceRect.y = 0;
sourceRect.w = background->w;
sourceRect.h  = background->h;

//设置在屏幕上显示的大小和位置
destinationRect.x = 0;
destinationRect.y = 0;
destinationRect.w = background->w;
destinationRect.h  = background->h;

//把图片画到屏幕上
SDL_BlitSurface(background, &sourceRect, screen, &destinationRect);

//更新屏幕,现在可以看到图片了
SDL_UpdateRect(screen, 0, 0, 0, 0);

//释放图片所占的内存
SDL_FreeSurface(background);

//延迟2秒钟, 如果图象一闪而过,可以把数字改大一点
SDL_Delay(2000);


return 0;
}

[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-5-19 10:38:26 | 显示全部楼层
谢谢!
按照楼主的话,试了一下!
可以了!
但是我不明白,gcc -lSDL -L/usr/lib -lpthread
后面的参数是什么意思?
回复

使用道具 举报

 楼主| 发表于 2004-5-19 13:24:27 | 显示全部楼层
又有一个问题!
这个程序不能在控制台下运行!
怎样才能在控制台下才能运行?
以上面的程序为例!
回复

使用道具 举报

发表于 2004-5-19 13:47:26 | 显示全部楼层
[quote:ece27267ef="taxuewuhen"]谢谢!
按照楼主的话,试了一下!
可以了!
但是我不明白,gcc -lSDL -L/usr/lib -lpthread
后面的参数是什么意思?[/quote]
看gcc文档
回复

使用道具 举报

发表于 2004-5-19 20:38:13 | 显示全部楼层
打开FrameBuffer。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-8 09:05 , Processed in 0.060858 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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