Para compilar com a opção -Wl(...) no Linux (sem trocar esse valor pelo terminal), é necessário alterar o Makefile?
Hmmm.
Depois eu escrevo mais sobre isto, mas no momento da para dizer que tem algum problema com essas opções no linux (pelo menos com a minha distribuição Ubuntu) .
Gerei o executável para o Windows (no Vista) usando a opção Wl,--stack=10000000
como diz o FAQ da EP2 e tudo funcionou direito, ou seja, o programa explodia quando eu
carregava a imagem imagem1.ppm e depois que coloquei essa opção para aumentar
o stack limit o programa parou de explodir .
No linux, ao colocar essa opção (bem, tem que modificar um pouco...) aparecia uma mensagem de "opção stack não reconhecida" . Andei olhando por ai e parece que isto é realmente um problema, mas preciso investicar mais (isto fica para uma próxima mensagem).
Bem, o que eu queria mesmo escrever é que na página
http://stackoverflow.com/questions/2275550/change-stack-size-for-a-c-application-in-linux-during-compilation-with-gnu-com
há uma descrição de como, no início do programa (main()), colocar um trecho de código
que aumenta o stack limit. Achei o código bacana . Para isto, no EP2, é necessário colocar
#include <sys/resource.h>
junto com os includes e o ínicio do main() fica assim
int main(int argc, char *argv[]) { ImagemRGB *imgOriginal = NULL; /* ponteiro para a imagem original */ ImagemRGB *tela = NULL; /* ponteiro para a imagem corrente ou atual */ CelRegiao *listaRegioes = NULL; /* ponteiro para a lista de regioes */ /* trecho copiado de http://stackoverflow.com/questions/2275550/change-stack-size-for-a-c-application-in-linux-during-compilation-with-gnu-com */ const rlim_t kStackSize = 16 * 1024 * 1024; /* min stack size = 16 MB */ struct rlimit rl; int result; result = getrlimit(RLIMIT_STACK, &rl); if (result == 0) { if (rl.rlim_cur < kStackSize) { rl.rlim_cur = kStackSize; result = setrlimit(RLIMIT_STACK, &rl); if (result != 0) { fprintf(stderr, "setrlimit returned result = %d\n", result); } } }
Testei e funcionou como especificado .
Bem, o -Wl,--stack... fica para uma outra mensagem.