On Jun 12, 5:04 am, Wolfgang Draxinger <wdraxin...@[EMAIL PROTECTED]
>
wrote:
> pera wrote:
> > Hello, I'm trying to make a tiny app with glut (cross-platform)
> > in C with gcc. I'm not using "int main(int argc, char **argv)"
> > instead that I'm setting the start point with "void
> > _start(void)" (and - nostartfiles in my makefile)... and works,
>
> Why are you dooing this? Specifying the program entry point
> yourself means, that you totally omit the runtime libraries
> initialisation code. This code does im****tant things: Set up
> dynamic memory management structures for malloc, set FPU
> registers, and in case of C++ calls static constructors.
>
first: thanks for your time =)
I'm doing this because I need space (I'm making a 4kb intro/
demoscene).
> > but the problem is that glutInit need argc and argv.
> > My question is, there is someway to use glut without real argc
> > and argv?
>
> Well, yes, but you will then be unable to set things like window
> geometry and stuff by command line parameters.
>
I dont need any parameter
> > if I define my own argc (=1) and argv pointer I get a
> > segmentation fault :S ("Program received signal SIGSEGV,
> > Segmentation fault. 0xb7270622 in strrchr () from
> > /lib/libc.so.6")
>
> Could it be due to the simple fact, that libc isn't initialized
> and thus any call in a function of it may hit uninitialized
> structures?
>
> Did you try those self defined glutInit parameters from within a
> ordinary main?
>
> Wolfgang Draxinger
Yes, look this:
/*** BEGIN ***/
#include <GL/glut.h>
void init(void){
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
int main(void){
int argc=1;
char **argv;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutCreateWindow("Intro");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
/*** END ***/
This works great, but if I set my own entry point "void _start(void)"
instead of main I get the segmentation fault :/
why?


|