Salve,
O assunto deste tópico é o liqueditor (linker) e está relecionado com o tópico EP2 - SegFault com executável fornecido e imagem 1" criado pelo Vinícius e o tópico e o tópico Problemas ao executar ep2-linux criado pelo Renato.
Vou escrever um pouco, mas sugiro vocês darem uma lida na página
http://en.wikipedia.org/wiki/Linker_(computing)
e a "man page" do ld (ver abaixo).
Algumas mensagens de erro que aparecem quando invocamos o gcc não são do gcc.
Por exemplo,
meu_prompt> gcc -Wl,--stack,16000000 main.o graphic.o imagem.o io.o -o ep2 -lGL -lGLU -lglut /usr/bin/ld: unrecognized option '--stack' /usr/bin/ld: use the --help option for usage information collect2: error: ld returned 1 exit status make: *** [ep2] Error 1
No Unix, em geral, o nome do programa que gera a mensagem aparece no início sa mensagem de erro.
Notem o /usr/bin/ld no começo da mensagem de erro "unrecognized...".
(A propósito, talvez seja bom você fazerem algo semelhante.
Quando houver uma mensagem de erro quem imprime avisa "Fui eu!: ...".)
Voltando, a mensagem anterior não foi gerada pelo gcc, mas sim pelo pelo ld, linker do Unix
http://en.wikipedia.org/wiki/GNU_linker
O processo de compilação verifica se o programa está sintaticamente correto e, se for o caso gera os chamados "object files".
Esse object files, que muitas vezes tem a extensão .o, não são arquivos executáveis.
Eles possuem referências às funções que não estão no arquivo fonte do seu programa (como scanf, fscanf. . .).
Um outro programa, o "linker" que no caso é o ld, é o responsável por criar o arquivo executável. Vejam
meu_prompt> man ld LD(1) GNU Development Tools LD(1) NAME ld - The GNU linker SYNOPSIS ld [options] objfile ... DESCRIPTION ld combines a number of object and archive files, relocates their data and ties up symbol references. Usually the last step in compiling a program is to run ld. [...]
Agora, sobre o -Wl,... a man page, l[a na frente diz:
Note---if the linker is being invoked indirectly, via a compiler driver (e.g. gcc) then all the linker command line options should be prefixed by -Wl, (or whatever is appropriate for the particular compiler driver) like this: gcc -Wl,--start-group foo.o bar.o -Wl,--end-group This is important, because otherwise ...
Resumindo, ainda não sei qual o problema em alterar o stack limit durante o processo de compilação/linquedição.