Archief - [ALG][C] Problemen met makefile

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Mr. Icecube

Legacy Member
Hey,

Ik moet voor school wat OpenGL schrijven en dat moet hier thuis gebeuren.
Programma's zonder texturen kan ik zonder problemen maken.
Maar ik heb nu texturen nodig en we moeten daarvoor de jpeg-6b libraries gebruiken.
Ik heb deze gedownload en allle stappen gevolgd om ze op mijn systeem (draait op Ubuntu) te installeren. Ook heb ik 2 files gekregen die ik mee moet compilen om alles te kunnen gebruiken. Dit zijn InitJPG.c en InitJPG.h.

Het probleem is nu dat ik deze files niet kan maken.Ik ben nu wel niet echt een held in het schrijven van makefiles, maar heb me op andere voorbeelden gebaseerd. Het resultaat is dit:

Code:
INCLUDE = -I/usr/include/
LIBDIR  = -L/usr/X11R6/lib

COMPILERFLAGS = -Wall
CC = gcc
CFLAGS = $(COMPILERFLAGS) $(INCLUDE)
LIBRARIES = -lX11 -lXi -lXmu -lglut -lGL -lGLU -ljpeg -lm

all: $(basename $(wildcard InitJPG.c))
InitJPG : InitJPG.o
        $(CC) $(CFLAGS) -o $@ $(LIBDIR) $< $(LIBRARIES)

Deze makefile lijkt me juist, want ik kan er wel andere programma's mee compilen.


De fouten die ik krijg bij het maken, zijn:

Code:
gcc -Wall -I/usr/include/ -o InitJPG -L/usr/X11R6/lib InitJPG.o -lX11 -lXi -lXmu -lglut -lGL -lGLU -ljpeg -lm    
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [InitJPG] Error 1

Kan iemand mij hierbij helpen? Het is nogal dringend en ik weet echt niet wat ik moet doen.

Alvast Bedankt!

Tyfius

Legacy Member
Ik ben zelf ook geen makefile expert, maar kan ik je Code::Blocks aanraden? Deze IDE (waarvoor Ubuntu packages beschikbaar zijn) maakt het je al een pak makkelijker.

Nu, het probleem is dat de linker de juiste libraries niet vindt. Ik gok dus dat het pad /usr/X11R6/lib verkeerd is, of de libraries die jij moet hebben daar niet te vinden zijn.

Mr. Icecube

Legacy Member
Heb het probleem voorlopig opgelost door gewoon rechtstreeks een gcc commando in te geven.
Ik wil InitJPG.c trouwens bij een programma van mij voegen (pstelsel.c) om zo daarin texture te kunnen gebruiken. Het programma werkt op school, maar hier kan ik het niet compilen :(

Commando:
Code:
 gcc -Wall InitJPG.c pstelsel.c -o licht -lX11 -lXi -lXmu -lglut -lGL -lGLU -ljpeg -lm

Resultaat:
Code:
pstelsel.c:4: warning: data definition has no type or storage class
pstelsel.c:4: warning: type defaults to &#8216;int&#8217; in declaration of &#8216;plat&#8217;
pstelsel.c: In function &#8216;toetsen&#8217;:
pstelsel.c:31: warning: implicit declaration of function &#8216;exit&#8217;
pstelsel.c:31: warning: incompatible implicit declaration of built-in function &#8216;exit&#8217;
pstelsel.c: In function &#8216;myinit&#8217;:
pstelsel.c:65: error: &#8216;tImageJPG&#8217; undeclared (first use in this function)
pstelsel.c:65: error: (Each undeclared identifier is reported only once
pstelsel.c:65: error: for each function it appears in.)
pstelsel.c:65: error: &#8216;pImage&#8217; undeclared (first use in this function)
pstelsel.c:72: warning: implicit declaration of function &#8216;LoadJPG&#8217;
pstelsel.c: In function &#8216;main&#8217;:
pstelsel.c:214: warning: control reaches end of non-void function

De errors zijn dus dat bepaalde functies niet teruggevodnen worden, terwijl ze daadwerkelijk in InitJPG.C staan.

De code van mij pstelsel.c:

Code:
#include "pstelsel.h"

int Windowbreedte=800,Windowhoogte=600;
int draaien=0,tex=0,banen=0;plat=1;
float phi=0;
float x[AANT]={0.0, 1.6, 2.0, 2.5, 3.5, 4.8, 6.3, 8.7, 10.5, 6.3, 4.8};
float z[AANT]={0.0, 1.4, 1.8, 2.2, 2.5, 4.3, 6.0, 8.5, 10.0 , 6.0, 4.3};
float r[AANT]={1.0, 0.3, 0.54,  0.55, 0.4, 1.05, 1.03, 0.85, 0.825, 1.85, 0.2};
float speed[AANT]={0.0,1.9,1.5,1,0.6,0.5,0.4,0.3,0.2, 0.4, 0.5};
float y[AANT]={0.0, -0.3,0.3,-0.5,0.3,-0.2,0.6,-0.8,0.1, 0.6, -0.2};
char planeten[AANT][LEN]={"zon.jpg","mer.jpg","ven.jpg","aar.jpg","mar.jpg","jup.jpg","sat.jpg","ura.jpg","nep.jpg","ring.jpg","maan.jpg"};
static GLuint texnaam[AANT];
GLfloat grijs[]       = {0.5,0.5,0.5,1.0};
GLfloat wit[]       = {1.0,1.0,1.0,1.0};
GLfloat zwart[]     = {0.0,0.0,0.0,1.0};
GLfloat rood[]      = {1.0,0.0,0.0,1.0};
GLfloat roodblauw[]      = {1.0,0.0,1.0,1.0};
GLfloat groen[]     = {0.0,1.0,0.0,1.0};
GLfloat blauw[]     = {0.0,0.0,1.0,1.0};
GLfloat geel[] = {1.0,0.8,0.2,1.0};
GLfloat oranje[] = {1.0,0.8,0.5,1.0};
GLfloat *kleur[AANT] = {geel,rood,grijs,blauw,roodblauw,groen,oranje,wit,geel,grijs,rood};
float camx=0,camy=0,camz=0;

void toetsen( unsigned char key, int x, int y)
{
	switch ( key )
	{
		case 'p' : draaien = !draaien;     break;
		case 't' : tex=!tex;		break;
		case 'q' : exit(0);                break;
		case 'x' : camx++;		break;
		case 'X' : camx--;		break;
		case 'y' : camy++;		break;
		case 'Y' : camy--;		break;
		case 'z': camz++;		break;
		case 'Z' :camz--;		break;
		case '+' :camx--;camy--;camz--; break;
		case '-' :camx++;camy++;camz++; break;
		case 'r' :camx=0;camy=0;camz=0;phi=0; break;
		case 'b' : banen=!banen;	break;
		case 'f' : plat=!plat;		break;
	}
	glutPostRedisplay();
}

void anim(void)
{
	if ( draaien )
	{
		phi += 0.1;
	}
	//glutSwapBuffers();
	glutPostRedisplay();
}


void myinit()
{
	glEnable(GL_DEPTH_TEST);
	glClearColor(0.0,0.0,0.0,0.0);


	int i;
	tImageJPG *pImage;
	glShadeModel(GL_SMOOTH);
	glPixelStorei(GL_UNPACK_ALIGNMENT,1);
	glGenTextures(AANT,texnaam);

	for(i=0;i<AANT;i++)
	{
		pImage=LoadJPG(planeten[i]);
		glBindTexture(GL_TEXTURE_2D,texnaam[i]);
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pImage->sizeX, pImage->sizeY,
       	                0, GL_RGB, GL_UNSIGNED_BYTE, pImage->data);
	}
}

void Tekenen(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	gluLookAt(15+camx,15+camy,15+camz,0,0,0,0,1,0);
	
	int i;
	float j;
	GLUquadricObj *quad[AANT];

	for(i=0;i<AANT;i++)
	{
		quad[i]=gluNewQuadric();
		if(tex)
		{
			gluQuadricTexture(quad[i],GL_TRUE);
		}
	}
	
	glColor4fv(wit);

	if(banen)
	{
		for(i=0;i<AANT;i++)
		{
			glBegin(GL_LINES);
				for(j=0;j<2*M_PI;j+=0.1)
				{
					if(plat)
					{
						glVertex3d(cos(j)*x[i],0,sin(j)*z[i]);
					}
					else
					{
						glVertex3d(cos(j)*x[i],y[i],sin(j)*z[i]);
					}
				}
			glEnd();
		}
	}
			

	if(!tex)
	{
		glBegin(GL_LINES);
			glVertex3d(0,0,0);
			glVertex3d(0,0,LENGTE);
		glEnd();
	
		glBegin(GL_LINES);
			glVertex3d(0,0,0);
			glVertex3d(LENGTE,0,0);
		glEnd();

		glBegin(GL_LINES);
			glVertex3d(0,0,0);
			glVertex3d(0,LENGTE,0);
		glEnd();
	}

	for(i=0;i<AANT;i++)
	{
		if(tex)
		{
			glEnable(GL_TEXTURE_2D);
			glBindTexture(GL_TEXTURE_2D, texnaam[i]);
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
			glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
		}
		else
		{
			glColor4fv(kleur[i]);
		}
		glPushMatrix();
		if(plat)
		{
			glTranslatef(cos(phi*speed[i])*x[i],0,sin(phi*speed[i])*z[i]);
		}
		else
		{
			glTranslatef(cos(phi*speed[i])*x[i],y[i],sin(phi*speed[i])*z[i]);
		}
		if(i==MAAN)
		{
			glTranslatef(cos(phi*5)*(r[JUP]+0.5),cos(phi*5)*(r[JUP]+0.5),sin(phi*5)*(r[JUP]+0.3));
		}
		if(i!=RING)
		{
			glRotatef(90,1,0,0);
			glRotatef(phi*speed[i]*20,0,0,1);
			gluSphere(quad[i],r[i],SLICES,STACKS);
		}
		else
		{
			glRotatef(90,1,0,0);
			gluPartialDisk(quad[i],r[SAT]+0.2,r[i],SLICES,STACKS,0,360);
		}
		glPopMatrix();
		if(tex)
		{
			glDisable(GL_TEXTURE_2D);
		}
	}


	glutSwapBuffers();

	//glFlush();
}

void Vervormen(GLint breedte, GLint hoogte)
{
	glMatrixMode(GL_PROJECTION);
        glLoadIdentity();

        gluPerspective(60.0,4.0/3.0,1.0,100.0);
	glViewport(0,0,breedte,hoogte);
}

int main(int argc,char *argv[])
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
	glutInitWindowSize(Windowbreedte,Windowhoogte);
	glutInitWindowPosition(100,100);
	glutCreateWindow("Planetenstelsel");
	myinit();
	glutKeyboardFunc(toetsen);
	glutReshapeFunc(Vervormen);
	glutDisplayFunc(Tekenen);
	glutIdleFunc(anim);
	glutMainLoop();
}

Doe ik iets verkeerd of zo? Want dit lijkt me echt wel juist

Tyfius

Legacy Member
De error is vrij logisch. Waar is "tImageJPG" gedefinieerd? Hetzelfde geldt voor de meeste warnings. De juiste header files zijn niet geincludeerd.

En op lijn 4 heb je ;plat=1 staan in plaats van ,plat=1.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan