[ld][g++][make] Kan inte länka in SDL...
EDIT2: Visade sig att det förmodliget var GNU Linker som var boven, Instalerade Gold Linker (binutils-gold) och allt blev så bra..
EDIT: kom precis hem och där är samma på den stationära...
Hej jag har lite problem med att kompilera min kod, jag har kontrollerat att jag har alla libsdl paket och libsdl-*-dev paket som är relevanta.
har kollat att biblioteken är på rätt plats också...
detta problem började uppstå när jag uppgraderade till Ubuntu 11.10 på lapptopen, dock tror jag att det fungerar på min stationära med samma OS och bibliotek...
har även installerat om SDL bibliotek 5-6 ggr... no luck...
$ make
g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/main.cpp -o obj/main.o
g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/SDLWrapper.cpp -o obj/SDLWrapper.o
src/SDLWrapper.cpp:82:3: varning: flerradskommentar [-Wcomment]
src/SDLWrapper.cpp: I medlemsfunktion "void SDLWrapper::mainLoop()":
src/SDLWrapper.cpp:103:8: varning: oanvänd variabel "eChar" [-Wunused-variable]
g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameLogic.cpp -o obj/gameLogic.o
src/gameLogic.cpp:32:6: varning: oanvänd parameter "invader" [-Wunused-parameter]
src/gameLogic.cpp:66:6: varning: oanvänd parameter "player" [-Wunused-parameter]
g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameObjects.cpp -o obj/gameObjects.o
g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameObjectProjectile.cpp -o obj/gameObjectProjectile.o
g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameObjectPlayer.cpp -o obj/gameObjectPlayer.o
g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameObjectInvader.cpp -o obj/gameObjectInvader.o
g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameObjectExplotion.cpp -o obj/gameObjectExplotion.o
ar rs obj/gameObjects.a obj/gameObjects.o obj/gameObjectProjectile.o obj/gameObjectPlayer.o obj/gameObjectInvader.o obj/gameObjectExplotion.o
ar: creating obj/gameObjects.a
g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf obj/main.o obj/SDLWrapper.o obj/gameLogic.o obj/gameObjects.a -o bin/invaders
obj/SDLWrapper.o: In function `SDLWrapper::convertImage(SDL_Surface*)':
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:24: undefined reference to `SDL_DisplayFormatAlpha'
obj/SDLWrapper.o: In function `SDLWrapper':
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:42: undefined reference to `SDL_Init'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:43: undefined reference to `TTF_Init'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:45: undefined reference to `TTF_OpenFont'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:47: undefined reference to `SDL_SetVideoMode'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:53: undefined reference to `TTF_RenderText_Solid'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:57: undefined reference to `IMG_Load'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:60: undefined reference to `IMG_Load'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:63: undefined reference to `IMG_Load'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:66: undefined reference to `IMG_Load'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:69: undefined reference to `SDL_FreeSurface'
obj/SDLWrapper.o: In function `~SDLWrapper':
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:84: undefined reference to `SDL_FreeSurface'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:85: undefined reference to `SDL_FreeSurface'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:86: undefined reference to `SDL_FreeSurface'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:87: undefined reference to `SDL_FreeSurface'
obj/SDLWrapper.o:/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:88: more undefined references to `SDL_FreeSurface' follow
obj/SDLWrapper.o: In function `~SDLWrapper':
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:90: undefined reference to `TTF_CloseFont'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:91: undefined reference to `TTF_Quit'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:92: undefined reference to `SDL_Quit'
obj/SDLWrapper.o: In function `SDLWrapper::mainLoop()':
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:111: undefined reference to `SDL_GetTicks'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:113: undefined reference to `SDL_PollEvent'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:215: undefined reference to `SDL_Flip'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:216: undefined reference to `SDL_FillRect'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:218: undefined reference to `SDL_GetTicks'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:219: undefined reference to `SDL_GetTicks'
/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:219: undefined reference to `SDL_Delay'
obj/gameObjects.a(gameObjectPlayer.o): In function `gameObjectPlayer':
/home/dev/bzr/invaders-sdl/src/gameObjectPlayer.cpp:28: undefined reference to `SDL_GetTicks'
obj/gameObjects.a(gameObjectPlayer.o): In function `gameObjectPlayer::draw(SDL_Surface*)':
/home/dev/bzr/invaders-sdl/src/gameObjectPlayer.cpp:57: undefined reference to `SDL_UpperBlit'
obj/gameObjects.a(gameObjectPlayer.o): In function `gameObjectPlayer::shoot()':
/home/dev/bzr/invaders-sdl/src/gameObjectPlayer.cpp:71: undefined reference to `SDL_GetTicks'
/home/dev/bzr/invaders-sdl/src/gameObjectPlayer.cpp:73: undefined reference to `SDL_GetTicks'
collect2: ld returnerade avslutningsstatus 1
make: *** [default] Fel 1
Makefile:
CXX=g++
BINARY=bin/invaders
CXXFLAGS=-W -Wall -o0 -g
SDLFLAGS=`sdl-config --cflags --libs` -lSDL_image -lSDL_ttf
default: obj/main.o obj/SDLWrapper.o obj/gameLogic.o obj/gameObjects.a
$(CXX) $(CXXFLAGS) $(SDLFLAGS) $^ -o $(BINARY)
############# CREATING OBJECT FILES ####
obj/main.o: src/main.cpp
$(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@
obj/SDLWrapper.o: src/SDLWrapper.cpp
$(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@
obj/gameLogic.o: src/gameLogic.cpp
$(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@
## need to create an archive... stupid shit..
obj/gameObjects.a: obj/gameObjects.o obj/gameObjectProjectile.o \
obj/gameObjectPlayer.o obj/gameObjectInvader.o obj/gameObjectExplotion.o
ar rs obj/gameObjects.a $^
## Files te create archive.
obj/gameObjects.o: src/gameObjects.cpp
$(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@
obj/gameObjectProjectile.o: src/gameObjectProjectile.cpp
$(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@
obj/gameObjectPlayer.o: src/gameObjectPlayer.cpp
$(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@
obj/gameObjectInvader.o: src/gameObjectInvader.cpp
$(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@
obj/gameObjectExplotion.o: src/gameObjectExplotion.cpp
$(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@
############# TEST STUFF AND CLEANING ####
test:
echo $(CXX) $(CXXFLAGS) $(SDLFLAGS) -o $(BINARY) $(OBJECTFILES)
.PHONY: clean run
.IGNORE: clean run
clean:
rm src/*.*~
rm obj/*.o
rm obj/*.a
rm $(BINARY)
run:
./bin/invaders
SDLWrapper.cpp
#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#include "SDLWrapper.h"
#include "gameLogic.h"
#include "gameObjects.h"
#include "gameObjectProjectile.h"
#include "gameObjectPlayer.h"
#include "gameObjectInvader.h"
SDL_Surface* SDLWrapper::convertImage(SDL_Surface *inSurf){
//Converts Images to correct bit depth.
// do not forget to free the old surface if needen..
SDL_Surface *newSurf;
if(inSurf != NULL){
newSurf = SDL_DisplayFormatAlpha(inSurf);
}else{
printf("Some shit when down when trying to convert image...\n");
printf("Is the image loaded?\n");
exit(EXIT_FAILURE);
}
printf("image loaded\n");
return newSurf;
}
SDLWrapper::SDLWrapper(){
//Constructor for class...
//Itit some stuff...
ScreenHeight = 480;
ScreenWidth = 640;
printf("onloading...\n");
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
font = TTF_OpenFont("media/fonts/ubuntu-font-family/UbuntuMono-B.ttf", 24);
screen = SDL_SetVideoMode(ScreenWidth, ScreenHeight, 8, SDL_HWSURFACE | SDL_DOUBLEBUF);
colorWhite.r =255;
colorWhite.b =255;
colorWhite.g =255;
textScore = TTF_RenderText_Solid(font, "Score: 0", colorWhite);
SDL_Surface *tmpimage; //somewhare te store the images temorarely..
tmpimage = IMG_Load("media/images/player.png");
playerImage = convertImage(tmpimage);
tmpimage = IMG_Load("media/images/invader.png");
invaderImage = convertImage(tmpimage);
tmpimage = IMG_Load("media/images/explosion.png");
explotionImage = convertImage(tmpimage);
tmpimage = IMG_Load("media/images/projectile.png");
projetileImage = convertImage(tmpimage);
SDL_FreeSurface(tmpimage); //freeing the temp image..
isRun = (true);
player = new gameObjectPlayer(100, 100, ScreenWidth/2,\
(ScreenHeight/2)+(ScreenWidth/4), playerImage);
printf("everything onloaded \n");
}
SDLWrapper::~SDLWrapper(){
//free willy! \o/.... sorry free the surfaces..
// |
// / \
printf("offloading...\n")
SDL_FreeSurface(playerImage);
SDL_FreeSurface(invaderImage);
SDL_FreeSurface(explotionImage);
SDL_FreeSurface(projetileImage);
SDL_FreeSurface(screen);
TTF_CloseFont(font);
TTF_Quit();
SDL_Quit();
printf("everything offloaded...\n");
}
void SDLWrapper::mainLoop(){
printf("mainLoop\n");
const int FPS = 85; //Max FPS
Uint32 fpsTimerStart;
//0 up, 1 down, 2 left, 3 righ, 4 shoot, 5 quit
bool eventBool[6] = {0, 0, 0, 0, 0, 0};
SDL_Event event;
while(isRun){
fpsTimerStart = SDL_GetTicks();
SDL_PollEvent( &event );
switch(event.type){
case SDL_QUIT:
eventBool[5] = 1;
printf("exiting?\n");
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym){
case SDLK_ESCAPE:
case SDLK_q:
eventBool[5] = 1;
break;
case SDLK_UP:
eventBool[0] = 1;
eventBool[1] = 0;
break;
case SDLK_DOWN:
eventBool[1] = 1;
eventBool[0] = 0;
break;
case SDLK_LEFT:
eventBool[2] = 1;
eventBool[3] = 0;
break;
case SDLK_RIGHT:
eventBool[3] = 1;
eventBool[2] = 0;
break;
case SDLK_SPACE:
eventBool[4] = 1;
break;
default:
break;
}
break;
case SDL_KEYUP:
switch(event.key.keysym.sym){
case SDLK_ESCAPE:
case SDLK_q:
eventBool[5] = 0;
break;
case SDLK_UP:
eventBool[0] = 0;
eventBool[1] = 0;
break;
case SDLK_DOWN:
eventBool[1] = 0;
eventBool[0] = 0;
break;
case SDLK_LEFT:
eventBool[2] = 0;
eventBool[3] = 0;
break;
case SDLK_RIGHT:
eventBool[3] = 0;
eventBool[2] = 0;
break;
case SDLK_SPACE:
eventBool[4] = 0;
break;
default:
break;
}
break;
}
if(eventBool[5]){ //quit
isRun = (false);
}
if(eventBool[3]){ //right
player->move(1,0);
}
if(eventBool[2]){ //left
player->move(-1,0);
}
if(eventBool[1]){ //domn
player->move(0,1);
}
if(eventBool[0]){ //up
player->move(0,-1);
}
if(eventBool[4]){ //shoot
player->shoot();
}
player->draw(screen);
SDL_Flip(screen);
SDL_FillRect(screen, NULL, 0x000000000);
if(SDL_GetTicks() - fpsTimerStart < 1000/FPS ){
SDL_Delay(1000/FPS - (SDL_GetTicks() - fpsTimerStart));
}
}
}
gameObjectPlayer.cpp:
#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#include "SDLWrapper.h"
#include "gameLogic.h"
#include "gameObjects.h"
#include "gameObjectProjectile.h"
#include "gameObjectPlayer.h"
#include "gameObjectInvader.h"
gameObjectPlayer::gameObjectPlayer(int hitpoints, int damage, int x, int y,\
SDL_Surface *image){
mHitpoints = hitpoints;
mDamage = damage;
mX = x;
mY = y;
mRadius = 16;
mObjectImage = image;
shootTimer = SDL_GetTicks(); // store the timer
shootTime = 200; // 0.2 sec
}
gameObjectPlayer::~gameObjectPlayer(){
//empty?
}
void gameObjectPlayer::move(int deltaX, int deltaY){
mX = deltaX + mX;
mY = deltaY + mY;
}
int gameObjectPlayer::getRadius(){
return mRadius;
}
void gameObjectPlayer::giveDamage(int damage){
mHitpoints -= damage;
}
void gameObjectPlayer::draw(SDL_Surface *surface){
objectRect.x = mX - 16; //cus the image is 32x32, have to make it render in
objectRect.y = mY - 16; //the middle of the image at mX and mY
SDL_BlitSurface(mObjectImage, NULL, surface, &objectRect);
}
bool gameObjectPlayer::isDead(){
if(mHitpoints <= 0){
return true;
} else {
return false;
}
}
void gameObjectPlayer::shoot(){
if(SDL_GetTicks() - shootTimer > shootTime && !isDead()){
printf("I shot!!\n");
shootTimer = SDL_GetTicks();
}
}
void gameObjectPlayer::setPos(int x, int y){ //set posision if needed.
mX = x;
mY = y;
}
int gameObjectPlayer::getX(){
return mX;
}
int gameObjectPlayer::getY(){
return mY;
}
int gameObjectPlayer::getDamage(){
return mDamage;
}
@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix