Table of Contents
Atualizado
Se você achar que o erro gcc é realmente para main undefined, este guia pode ajudá-lo. g.Erro: Uma referência indefinida a ‘principal’ em programas C é um erro muito irracional, porque o programador ocorre quando o objetivo crítico () não existe no programa. Se você usou a tarefa principal () e geralmente o erro ainda existe, todos devem verificar a transliteração da função principal ().
g.
Sua função
mais valiosa pode ter sido especificada, tal como o pré-processamento.Para ver o que o pré-processamento faz, tente gcc -C -E es3.c> es3.i
, então use um único editor eficiente para inspecionar o es3.i gerado (e inspecionar main
v).
No início você pode querer (já que você ainda é um iniciante)
. Colete
gcc -wall -g -do es3.c gcc -wall -g es3.o Es3
O banner
-o -wall
é muito importante e você sempre o usará. Diz ao seu compilador para lhe dar (quase) todos os avisos. E você deve sempre ouvir os avisos terríveis, ou seja, corrigir o documento de obtenção es3.C
até parar de receber avisos.
O sinalizador -g
também é principal porque requer gcc
para criar suas informações de depuração para aquele objeto e exe em particular. Os clientes podem então usar um depurador (como comparado ao gdb
) para depurar seu programa. n.
Para obter os ícones da lista real conectados a um objeto ou executável, você precisa de nm
.
Claro, estou assumindo que os indivíduos estão usando uma máquina GNU / Linux (e eu sugiro que você contate GNU / Linux se ou quando você ainda não estiver usando).
Leia o FAQ incrivelmente: https://github.com/edenhill/librdkafka/wiki/FAQ
Eu só queria compilar mais um no diretório cpp_maker do CentOS 8.3, mas ocorreu um erro.
Compilar em g ++ -oproduzent_cpp.cpp -lrdkafka ++
Ativado:
/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o: na função` _start ':(.texto + 0x24): referência indefinida para: "principal"Erro de Collect2: ld parece ter atingido o estado de saída 1
IMPORTANTE: tente sempre reproduzir o problema nas últimas versões disponíveis no mercado (consulte https://github.com/edenhill/librdkafka/releases), caso não seja reproduzido na versão recém-lançada, tente consertar isto. foi protegido.
IMPORTANTE: emitiremos selos se toda a lista de verificação não tiver sido concluída recentemente.
Forneça as seguintes informações:
- Seleção de inventário Blibrdkafka (número da versão ou tag Git):
<1.6.0>
- Versão do Apache Kafka:
<2.13-2.7.0>
- configuração do usuário librdkafka:
- Sistema operacional:
- Enviando logs (com
debug = ..
e, portanto, opcionalmente) com librdkafka - Forneça extratos de dinheiro do corretor.
- Problema crítico: não crítico
Eu quero compilar o CentOS 8.3 no diretório um único “producter_cpp”, mas cometi um erro.
Compilar por g ++ -oproduzent_cpp.cpp -lrdkafka ++
IMPORTANTE: Sempre tente reproduzir o problema dentro da versão mais recente lançada (consulte https://github.com/edenhill/librdkafka/releases) onde entendo que não pode ser reproduzido na versão atual com certeza estar resolvido. p>
IMPORTANTE: Fecharemos caso a lista de verificação ainda não esteja completa.
- opção librdkafka (número da versão completa ou tag Git):
<1.6.0>
- Pacote Apache Kafka:
<2.13--2.7.0>
- configuração do cliente librdkafka:
- Sistema operacional:
- PSubmitir os logs (com
debug igual a ..
se necessário) librdkafka - Fornece extratos de corretor de cheques.
- Problema crítico: não crítico
/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o: em relação à função `_start ':(.text + 0x24) Indefinido: referência em relação ao "principal"Collect2> Erro: ld retornou 1 status de saída
Exemplo
Um dos erros de compilação mais comuns ocorre durante a vinculação. O erro é parecido com este:
rrr gcc undefined_reference.c/tmp/ccoXhwF0.o: Execute `main ':undefined_reference.c :(. texto simples + 0x15): referência de erro indefinida: `foo 'Collect2: ld renovado 1 estado de saída$
int foo (void);int best (int argc, char ** argv) int foo_val; foo_val é igual a foo (); return foo_val;
Vemos algum tipo de declaração para foo ( int foo ();
), mas há uma definição absoluta para ela (a função real). Distribuímos o compilador com os cabeçalhos de função, mas onde essa função não existia em nenhum lugar, então a fase do sistema acabou e o vinculador sempre conclui com um erro de Referência indefinida
.
Para corrigir esse erro em nosso pequeno programa, qualquer pessoa só precisa postar a definição com relação a foo:
por * Explicação de foo * / int foo (vazio);/ * Definição de foo * /int foo (vazio) return 5;int sole (int argc, char ** argv) int foo_val; foo_val = foo (); return foo_val;
Essas leis agora estão realmente compiladas. Outra situação surge no momento em que a fonte foo ()
é sua própria fonte separada foo file.c
(e há um cabeçalho foo. H
para declarando foo ()
, que pode estar em foo.c
assim como em undefined_reference.c
). Em seguida, corrija o problema específico de vincular o banco de dados de objetos foo.c
, quanto mais undefined_reference.c
, compilar dois arquivos base:
bucks gcc -c undefined_reference.c$ gcc -c foo.c$ gcc -e programa de trabalho undefined_reference.o foo.o$
money gcc -to Working_program undefined_reference.c foo.c$
Esta é uma mala de viagem mais complexa que usa bibliotecas comparáveis ao código principal:
#include #include #include int main (int argc, char ** argv) duplo primeiro; segundo combinado; produtividade dupla; (argc assumindo! = 3) fprintf (stderr, "Uso:% s n", argv [0]); Retorna EXIT_FAILURE; / * Converte a digitação do usuário em números, muitas outras verificações de erro (vazio) precisa ser feito aqui. 5 / primeiro = strtod (argv [1], NULL); segundo equivale a strtod (argv [2], NULL); / 5. Use a função pow () por causa da libm - este tipo de resultará em um link * este código irá compilar com a libm apenas em caso de erro! 7 / Realização = realização (primeiro, segundo); printf ("% f a% f ree p =% f n", primeiro, segundo, cardinalidade); Retornar EXIT_SUCCESS;
Acontece que o código está sintaticamente correto em geral, a declaração para obter pow ()
existe por causa de #include
, então tentamos compilar o programa e obter, mas erro de link que contém este tipo de:
$ gcc no_library_in_link.c -o no_library_in_link/tmp/ccduQQqA.o: No trabalho "principal":no_library_in_link.c :(. Texto indefinido + 0x8b): recurso para `pow 'Collect2: Erro: ld saltou um único estado de saída$
Isso ocorre porque não foram as únicas definições de pow ()
posicionadas durante a etapa de vinculação. Para resolver esse ato errado, precisamos especificar com sucesso que realmente queremos nos conectar a uma biblioteca de matemática de combate designada buraco libm
-lm
. (Observe o fato de que existem plataformas, por exemplo, onde macOS -lm
não é necessário, mas enquanto em obter link indefinido, arquivos necessários.)
Portanto, usamos o termo “nível de montagem” novamente, desta vez geralmente uma biblioteca (após qualquer fonte ou arquivo de modelo):
RR gcc no_library_in_link.c -lm -o library_in_link_cmd$ ./library_in_link_cmd com 42.000.000 para ajudar a potência de 4.000.000 corresponde a 16.000.000$
Atualizado
Você está cansado de ver seu computador lento? Irritado com mensagens de erro frustrantes? ASR Pro é a solução para você! Nossa ferramenta recomendada diagnosticará e reparará rapidamente os problemas do Windows, aumentando drasticamente o desempenho do sistema. Então não espere mais, baixe o ASR Pro hoje mesmo!
Gcc Error Undefined Reference To Main
Gcc-fout Ongedefinieerde Verwijzing Naar Hoofd
Błąd Gcc Niezdefiniowane Odniesienie Do Głównego
Erreur Gcc Référence Non Définie Au Principal
Ошибка Gcc Undefined Ссылка на главную
Error Gcc Referencia Indefinida A Main
Gcc-Fehler Undefinierter Verweis Auf Main
Errore Gcc Riferimento Non Definito A Main
메인에 대한 Gcc 오류 정의되지 않은 참조
Gcc-fel Odefinierat Referens Till Huvud