Please support our C++ advertiser: Programming Forums
Views: 2459 | Replies: 14
![]() |
•
•
Join Date: Jan 2007
Location: Maryland, USA
Posts: 1,036
Reputation:
Rep Power: 4
Solved Threads: 23
I am using debian linux and I cannot seem to get sdl_ttf working. It compiles fine but the program quits due to error checking in the code. It returns false at the ttf_init() part. Do not know if this makes a difference but I got sdl and ttf via apt.
Heres my compilation command :
heres my code (actually its a tutorials code. I do not claim that I made it or whatever)
Heres my compilation command :
g++ lesson07.cpp -o test -lSDL -lSDL_image -lSDL_ttf -lfreetype
heres my code (actually its a tutorials code. I do not claim that I made it or whatever)
=c++ Syntax (Toggle Plain Text)
/*This source code copyrighted by Lazy Foo' Productions (2004-2007) and may not be redestributed without written permission.*/ //The headers #include "SDL/SDL.h" #include "SDL/SDL_image.h" #include "SDL/SDL_ttf.h" #include <string> //Screen attributes const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; const int SCREEN_BPP = 32; //The surfaces SDL_Surface *background = NULL; SDL_Surface *message = NULL; SDL_Surface *screen = NULL; //The event structure SDL_Event event; //The font that's going to be used TTF_Font *font = NULL; //The color of the font SDL_Color textColor = { 255, 255, 255 }; SDL_Surface *load_image( std::string filename ) { //The image that's loaded SDL_Surface* loadedImage = NULL; //The optimized surface that will be used SDL_Surface* optimizedImage = NULL; //Load the image loadedImage = IMG_Load( filename.c_str() ); //If the image loaded if( loadedImage != NULL ) { //Create an optimized surface optimizedImage = SDL_DisplayFormat( loadedImage ); //Free the old surface SDL_FreeSurface( loadedImage ); //If the surface was optimized if( optimizedImage != NULL ) { //Color key surface SDL_SetColorKey( optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY, SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF ) ); } } //Return the optimized surface return optimizedImage; } void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL ) { //Holds offsets SDL_Rect offset; //Get offsets offset.x = x; offset.y = y; //Blit SDL_BlitSurface( source, clip, destination, &offset ); } bool init() { //Initialize all SDL subsystems if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 ) { return false; } //Set up the screen screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE ); //If there was in error in setting up the screen if( screen == NULL ) { return false; } //Initialize SDL_ttf if( TTF_Init() == -1 ) { return false; } //Set the window caption SDL_WM_SetCaption( "TTF Test", NULL ); //If everything initialized fine return true; } bool load_files() { //Load the background image background = load_image( "background.png" ); //Open the font font = TTF_OpenFont( "lazy.ttf", 28 ); //If there was a problem in loading the background if( background == NULL ) { return false; } //If there was an error in loading the font if( font == NULL ) { return false; } //If everything loaded fine return true; } void clean_up() { //Free the surfaces SDL_FreeSurface( background ); SDL_FreeSurface( message ); //Close the font that was used TTF_CloseFont( font ); //Quit SDL_ttf TTF_Quit(); //Quit SDL SDL_Quit(); } int main( int argc, char* args[] ) { //Quit flag bool quit = false; //Initialize if( init() == false ) { return 1; } //Load the files if( load_files() == false ) { return 1; } //Render the text message = TTF_RenderText_Solid( font, "The quick brown fox jumps over the lazy hound", textColor ); //If there was an error in rendering the text if( message == NULL ) { return 1; } //Apply the images to the screen apply_surface( 0, 0, background, screen ); apply_surface( 0, 200, message, screen ); //Update the screen if( SDL_Flip( screen ) == -1 ) { return 1; } //While the user hasn't quit while( quit == false ) { //While there's events to handle while( SDL_PollEvent( &event ) ) { //If the user has Xed out the window if( event.type == SDL_QUIT ) { //Quit the program quit = true; } } } //Free surfaces and font then quit SDL_ttf and SDL clean_up(); return 0; }
•
•
Join Date: Jan 2007
Location: Maryland, USA
Posts: 1,036
Reputation:
Rep Power: 4
Solved Threads: 23
•
•
•
•
Are you sure you have the SDL TTF runtime libraries installed properly?
libfreetype6, libsdl-ttf2.0-0, libsdl-ttf2.0-dev, libttf2, and libttf-dev
"Hey ass, don't hijack my thread. This is serious." -JoshSCH
Your header paths imply that they are a in a sub directory of your current directory.
Is that true?
In other words, if your current directory is
*/foo , the program will look for those headers in */foo/SDL
Otherwise the path is incomplete and/or incorrect.
From what you posted , I suspect that htses files may not exisit or are not where the program is looking for them.
do a dbupdate command (HD will churn for a few minutes) then type
locate SDL.h
This will return the path to that header if it exists.
Is that true?
In other words, if your current directory is
*/foo , the program will look for those headers in */foo/SDL
Otherwise the path is incomplete and/or incorrect.
From what you posted , I suspect that htses files may not exisit or are not where the program is looking for them.
do a dbupdate command (HD will churn for a few minutes) then type
locate SDL.h
This will return the path to that header if it exists.
•
•
Join Date: Jan 2007
Location: Maryland, USA
Posts: 1,036
Reputation:
Rep Power: 4
Solved Threads: 23
•
•
Join Date: Jan 2007
Location: Maryland, USA
Posts: 1,036
Reputation:
Rep Power: 4
Solved Threads: 23
•
•
•
•
Im not sure I understand. All the SDL stuff is in /usr/include/SDL/ . So I would use SDL/foo as my includes, correct?
No. Try changing your inclusions "s with < and >, because the directory that your SDL stuff resides in is a system directory, not a home one.
Although that's very unlikely to be what's causing you problems, as the code probably wouldn't even compile if the headers aren't being included.
tuxation.com - Linux articles, tutorials, and discussions
just chang all the include directives to absolute paths.
the first one would read:
#include "/usr/include/SDL/SDL.h"
which is the the absolute path name for THAT header. Do the rest of them using the same directory path. There is no doubt this way...
The compliler should be able to find the headers then. No gurantees that there will be no more problems, but at least that situation is handled.
the first one would read:
#include "/usr/include/SDL/SDL.h"
which is the the absolute path name for THAT header. Do the rest of them using the same directory path. There is no doubt this way...
The compliler should be able to find the headers then. No gurantees that there will be no more problems, but at least that situation is handled.
![]() |
•
•
•
•
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)






Linear Mode