Sign in to follow this  

Major problem, please help

Recommended Posts

I'm reciving these 2 errors, and i don't know what to do... - [Linker error] undefined reference to `libmsvcrt_a_iname' - [Linker error] undefined reference to `_nm__atexit' Here's my source, I searched online for a solution for a bit, but most of the information was etheir out of date, irrelavent, or to confusing for me to understand
// player = (SPRITE*)malloc(sizeof(SPRITE));
// the (SPRITE*) is major important

#include <stdio.h>
#include <allegro.h>
#include "mappyal.h"

#define WIDTH 640
#define HEIGHT 480
#define JUMPIT 1600

//define the sprite structure
typedef struct SPRITE
    int dir, alive;
    int x,y;
    int width,height;
    int xspeed,yspeed;
    int xdelay,ydelay;
    int xcount,ycount;
    int curframe,maxframe,animdir;
    int framecount,framedelay;

//declare the bitmaps and sprites
BITMAP *player_image[8];
SPRITE *player;
BITMAP *buffer;	
BITMAP *temp;

//tile grabber
BITMAP *grabframe(BITMAP *source, 
                  int width, int height, 
                  int startx, int starty, 
                  int columns, int frame)
    BITMAP *temp = create_bitmap(width,height);
    int x = startx + (frame % columns) * width;
    int y = starty + (frame / columns) * height;
    return temp;

int collided(int x, int y)
    BLKSTR *blockdata;
	blockdata = MapGetBlock(x/mapblockwidth, y/mapblockheight);
	return blockdata->tl;

int main (void)
    int mapxoff, mapyoff;
    int oldpy, oldpx;
    int facing = 0;
    int jump = JUMPIT;
    int n;


	set_gfx_mode(MODE, WIDTH, HEIGHT, 0, 0);

    temp = load_bitmap("guy.bmp", NULL);
    for (n=0; n<8; n++)
        player_image[n] = grabframe(temp,50,64,0,0,8,n);

    player = (SPRITE*)malloc(sizeof(SPRITE));
    player->x = 80;
    player->y = 100;

    //load the map
	if (MapLoad("sample.fmp")) exit(0);	

    //create the double buffer
	buffer = create_bitmap (WIDTH, HEIGHT);

    //main loop
	while (!key[KEY_ESC])

		oldpy = player->y; 
        oldpx = player->x;

		if (key[KEY_RIGHT]) 
            facing = 1; 
            if (++player->framecount > player->framedelay)
                if (++player->curframe > player->maxframe)
        else if (key[KEY_LEFT]) 
            facing = 0; 
            if (++player->framecount > player->framedelay)
                if (++player->curframe > player->maxframe)
        else player->curframe=0;

        //handle jumping
        if (jump==JUMPIT)
            if (!collided(player->x + player->width/2, 
                player->y + player->height + 5))
                jump = 0; 

		    if (key[KEY_SPACE]) 
                jump = 30;
            player->y -= jump/3; 

		if (jump<0) 
            if (collided(player->x + player->width/2, 
                player->y + player->height))
                jump = JUMPIT; 
                while (collided(player->x + player->width/2, 
                    player->y + player->height))
                    player->y -= 2; 

        //check for collided with foreground tiles
		if (!facing) 
            if (collided(player->x, player->y + player->height)) 
                player->x = oldpx; 
            if (collided(player->x + player->width, 
                player->y + player->height)) 
                player->x = oldpx; 
        //update the map scroll position
		mapxoff = player->x + player->width/2 - WIDTH/2 + 10;
		mapyoff = player->y + player->height/2 - HEIGHT/2 + 10;

        //avoid moving beyond the map edge
		if (mapxoff < 0) mapxoff = 0;
		if (mapxoff > (mapwidth * mapblockwidth - WIDTH))
            mapxoff = mapwidth * mapblockwidth - WIDTH;
		if (mapyoff < 0) 
            mapyoff = 0;
		if (mapyoff > (mapheight * mapblockheight - HEIGHT)) 
            mapyoff = mapheight * mapblockheight - HEIGHT;

        //draw the background tiles
		MapDrawBG(buffer, mapxoff, mapyoff, 0, 0, WIDTH-1, HEIGHT-1);

        //draw foreground tiles
		MapDrawFG(buffer, mapxoff, mapyoff, 0, 0, WIDTH-1, HEIGHT-1, 0);

        //draw the player's sprite
		if (facing) 
            draw_sprite(buffer, player_image[player->curframe], 
                (player->x-mapxoff), (player->y-mapyoff+1));
            draw_sprite_h_flip(buffer, player_image[player->curframe], 
                (player->x-mapxoff), (player->y-mapyoff));

        //blit the double buffer 
		blit(buffer, screen, 0, 0, 0, 0, WIDTH-1, HEIGHT-1);

	} //while

    for (n=0; n<8; n++)
	MapFreeMem ();
	return 0;


Share this post

Link to post
Share on other sites
Are you using functions called iname and atexit anywhere?

If so, why don't you use the Find function in windows to search all your *.lib files for iname and atexit. Believe it or not, this sort of thing has worked for me, although you may get extra results (libs that reference the function but don't define it).

Mike C.

Share this post

Link to post
Share on other sites
I'm gonna sound like a noob, but how would i go about that, just open all my lib functions and search. And if i do happen to find them, what should i do then, erase those functions???

Share this post

Link to post
Share on other sites
zike 22 it's a joke ?
use windows search. search inside of file u have this feature. I use it sometimes and it often helps. Usually you should link this library to your project

Share this post

Link to post
Share on other sites
1) What compiler are you using? If it is the express edition, chances are you don't have the platform SDK. You need this to develop windows applications.

2) If you are, try compiling it as a multi-threaded DLL application. I dunno, it does the trick for most of SDL's linker errors.

3) For the love of all that is good and holy, please don't use allegro... DOS is dead. END_OF_MAIN? what kind of cheap macro hack is that?

4) Include <stdlib.h>, that might make some of your errors go away.

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this