Autor Tópico: Erro ao compilar qualquer programa sem Main  (Lida 4165 vezes)

Offline hulkPT

  • Usuário Ubuntu
  • *
  • Mensagens: 5
    • Ver perfil
Erro ao compilar qualquer programa sem Main
« Online: 09 de Dezembro de 2009, 13:04 »
Boa tarde a todos,
tou com um problema que me está a inquietar bastante, desde ontem que nao consigo compilar programa nenhum que nao tenha main
Como por exemplo

Código: [Selecionar]
#include<stdio.h>
#include<string.h>

/*exemplo.c*/

void exemplo(){
         printf("\n Exemplo");
}
void exemplo2(){
         printf("\n Exemplo");
}
void exemplo3(){
         printf("\n Exemplo");
}

compilo: gcc exemplo.c -o exemplo
corro: ./exemplo

da o seguinte erro:
Código: [Selecionar]
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
collect2: ld returned 1 exit status

nunca vi coisa igual nao sei o que fazer ainda ontem tudo funcionava lindamente

desde ja obrigado

hulkPT

Offline NPC

  • Usuário Ubuntu
  • *
  • Mensagens: 230
  • Bot
    • Ver perfil
Re: Erro ao compilar qualquer programa sem Main
« Resposta #1 Online: 09 de Dezembro de 2009, 14:39 »
Ô moço, mas como você quer executar um programa sem main? Quem vai chamar aquelas funções?
A pergunta principal é: você conseguia fazer isso antes?
Googling since 1999.

Offline sboorbou

  • Usuário Ubuntu
  • *
  • Mensagens: 385
  • LPIC 2 - LPI 000180523 - Linux user 490229 - MCITP
    • Ver perfil
Re: Erro ao compilar qualquer programa sem Main
« Resposta #2 Online: 09 de Dezembro de 2009, 17:58 »
ja tinha olhado o topico antes e me feito a mesma pergunta... como vc fazia antes, mas como achei que não ia ajudar o topico me calei.......
duvida eu em você sinto... duvida a raiva leva, raiva ao ódio leva, ódio é o lado negro da força - Mestre Yoda

Darcamo

  • Visitante
Re: Erro ao compilar qualquer programa sem Main
« Resposta #3 Online: 09 de Dezembro de 2009, 19:15 »
Você não pode criar um executável sem a main.
Quando você faz
Código: [Selecionar]
gcc exemplo.c -o exemploo gcc faz duas coisas. Primeiro ele compila para um arquivo objeto e depois ele linka o que foi especificado para então gerar o arquivo executável. Você precisa ter implementado a função main para poder gerar um executável. Vai executar o que quando rodar o programa se não tiver a main?

Mas você pode compilar um arquivo objeto (um arquivo .o) sem ter implementado a função main e então linkar esse arquivo objeto com um outro programa que tenha uma função main para então criar um arquivo executável. Exatamente o que você quer fazer?

Offline hulkPT

  • Usuário Ubuntu
  • *
  • Mensagens: 5
    • Ver perfil
Re: Erro ao compilar qualquer programa sem Main
« Resposta #4 Online: 10 de Dezembro de 2009, 12:15 »
Peço desculpa mas tava completamente desorientado... No inicio tinha uma main() no programa e depois queria usar as funçoes noutro programa entao apaguei a main por isso é q nao dava... tou a fazer um programa com pipes e porta série tava me a dar a volta a cabeça so depois é que me aprecebi do que tava a fazer! Foi uma duvida/pergunta mesmo sem nexo eu ja estava a pensar em formatar o meu PC pensando que ele tava embruchado...
 Obrigado a todos na mesma para a proxima vou pensar bem calmente antes de postar!

Offline ricardofantin

  • Usuário Ubuntu
  • *
  • Mensagens: 105
    • Ver perfil
Re: Erro ao compilar qualquer programa sem Main
« Resposta #5 Online: 28 de Dezembro de 2009, 22:50 »
Existem diversas situações que o programa deve ser compilado sem o main():

Quando deseja-se usar código nativo apartir do java (JNI) é necessário implementar uma função em C/C++. Esse código é compilado com o gcc/g++ mesmo sem o main() e chamado de dentro do java. Para o compilador não reclamar a falta do main() é só passar como argumento -shared . (gcc -shared codigo.c)

Outra situação é quanto compila-se muitos arquivos separadamente e depois junta tudo. O make em geral faz isso. Vamos supor que você esteja fazendo um programa com quatro classes. Para compilar cada classe separadamente e depois junta-las você deve fazer assim:
g++ -c classe1.cpp -o classe1.o
g++ -c classe2.cpp -o classe2.o
g++ -c classe3.cpp -o classe3.o
g++ -c classe4.cpp -o classe4.o
g++ classe1.o classe2.o classe3.o classe4.o -o executavel
pesquise sobre o make se quiser saber mais de como e principalmente do porquê fazer isso.

Darcamo

  • Visitante
Re: Erro ao compilar qualquer programa sem Main
« Resposta #6 Online: 28 de Dezembro de 2009, 23:37 »
A main é necessária apenas quando você quer criar um executável.

Quando você passa a opção -shared você está criando uma biblioteca e não um executável. Nesse caso é exatamente o contrário: você não quer a função main.
Essa biblioteca pode então ser linkada com outros arquivos objeto para criar um executável e até mesmo chamada a partir de outras linguagens como você mencionou com o java. Quando se implementa módulos para o python em C também é a "mesma coisa". Você cria uma biblioteca que pode ser carregada pelo python.