"pera" <gomesbascoy@[EMAIL PROTECTED]
> wrote in message
news:e66655bc-bdc8-4686-bb28-b7568e8aaf24@[EMAIL PROTECTED]
> 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?
char **argv;
needs to be initialized. It is a vector of char *'s.
So you need to argv =malloc sizeof (char *) and
set argv[0] to = "ProgramName".
Or just forget the whole mess & set argc to 0.
jbw


|