fbpx

Comandos Linux – Comando cc

Comando Linux cc

Atualizado: 05/04/2019 por Computer Hope

comando cc

Em sistemas operacionais do tipo Unix, o comando cc executa o compilador C do sistema.

Este documento cobre a versão GNU / Linux do cc , que é um link simbólico para o gcc , a coleção do compilador GNU.

Descrição

O dever essencial do compilador é traduzir um programa de computador de um idioma para outro, e geralmente o faz mais de uma vez na compilação única.

Ao compilar um programa escrito em C, o compilador executa várias etapas para convertê-lo em código de máquina que pode ser executado na arquitetura ou plataforma de destino.

Em geral, o compilador executa as seguintes funções no seu código:

  1. Pré-processando. O pré-processador C (“cpp”) prepara seu código para ser enviado ao compilador real removendo comentários , expandindo macros e executando algumas outras etapas importantes.
  2. Verificação de sintaxe. Seu programa contém algum erro sintático? Nesse caso, o compilador informará e você precisará corrigi-los antes de prosseguir. Se houver suspeita de que algumas partes do seu programa não estão corretas, mas não há certeza de que sejam realmente erros, isso pode emitir avisos, mas ainda assim compilar o programa.
  3. Conversão para linguagem assembly. Essa é uma etapa intermediária na qual seu código é traduzido para o idioma da linguagem assembly do sistema de destino. Este é praticamente o último passo em que seu código ainda pode ser lido por um ser humano.
  4. Montagem. Seu programa é montado nos bits e bytes do código de objeto adequado para sua plataforma de destino.
  5. Linking. O código do objeto é vinculado ao código do objeto de qualquer função da biblioteca especificada pelo seu programa e opções de linha de comando, e um arquivo executável é criado.

Sintaxe

  cc [ opções ]

Opções

Existem literalmente centenas de opções que você pode passar para o compilador para ajustar como o programa é executado. Aqui, selecionamos algumas das opções mais úteis e mais usadas, que você pode precisar para criar um arquivo executável.

-cApenas compile o código; não tente vincular arquivos de origem . Os arquivos de objeto serão criados, que podem opcionalmente ser vinculados posteriormente em uma etapa separada para criar um arquivo executável.
-O [ nível ]Crie um executável otimizado. O compilador analisará seu código e, se souber de algum truque inteligente para acelerar o desempenho, ele será implementado no código de bytes. nível é um número, letra ou palavra opcional que pode especificar quanta otimização deve ser feita. Por exemplo, a coleção do compilador GNU permite que as opções -O0 especifiquem otimização mínima (o padrão), -O1 e -O2 para níveis intermediários de otimização e -O3 para otimização máxima. -Ofast pode ser usado como um alias para -O3 e -Og executará otimizações compatíveis com análises posteriores por um depurador .

A otimização requer mais computação e memória e levará mais tempo para ser concluída. Os truques comuns de otimização para sistemas x86 incluem a redução do tamanho das instruções para tornar a execução menos computacionalmente onerosa, a implementação de um registro dedicado para o valor zero (porque o zero é tão comum na maioria dos programas) e a otimização de certas operações de multiplicação e escalabilidade de índices de matriz, aproveitando da instrução LEA (“carregar endereço efetivo”).

-wallAtive os avisos “todos” (todos, exceto os mais esotéricos) ao compilar. Essa é uma boa opção para uso regular, pois pode levar você a qualquer condição que não seja um erro, mas que você pode resolver antes de compilar.
-ansiDesative a maioria (mas não todos) dos recursos não compatíveis com ANSI C fornecidos pelo cc . Para aderir a padrões ANSI rigorosos, ative esta opção. Isso garantirá que seu código seja totalmente portátil para ser compilado em qualquer outro sistema.
-gCrie uma versão de depuração do arquivo executável compilado. O compilador incluirá informações no executável compilado sobre qual linha de qual arquivo de origem corresponde a qual chamada de função. Um depurador mais tarde pode usar essas informações para mostrar o código fonte à medida que você avança no programa. Observe que isso cria um arquivo executável muito maior.
-D nome [ = valor ]Define uma macro em tempo de compilação, atribuindo o valor especificado ao nome do símbolo. Quando o pré-processador C for executado, ele expandirá quaisquer instâncias de nome para o texto de valor .
-I dirProcure no diretório os arquivos incluídos cujos nomes não começam com uma barra ( / ) antes de pesquisar nos diretórios comuns. Os diretórios para várias opções -I são pesquisados ​​na ordem especificada. O pré-processador primeiro pesquisa por #include arquivos no diretório que contém o arquivo de origem e, em seguida, nos diretórios nomeados com -I options (se houver), depois em / usr / ucbinclude e, finalmente, em / usr / include .
-L dirAdicione dir à lista de diretórios onde o compilador procurará bibliotecas vinculadas. Esta opção é passada para ld e / usr / lib .
-l bibliotecaSe vincular, essa opção adiciona a biblioteca indicada à lista de bibliotecas a serem vinculadas. Por exemplo, se você estiver usando funções da biblioteca matemática C ( libm ), vinculá-lo-á em tempo de compilação usando a opção -lm .

Esteja ciente das interdependências de suas bibliotecas e certifique-se de vinculá-las na ordem correta na linha de comando; especifique primeiro quaisquer bibliotecas das quais outras bibliotecas dependerão. Por exemplo, ” -lGL -lGLU ” pesquisará primeiro o libGL e depois o libGLU . A libGLU depende da libGL , portanto, se você inverter a ordem dessas opções -l , o programa não será compilado.

-MSe vincular, cria um arquivo de mapa com o mesmo nome base que o executável de saída, mas com o sufixo .map . Este arquivo de mapa contém uma lista de símbolos com seus endereços.
-m modeloEspecifica o modelo de memória que o compilador e o vinculador usam. Os valores do modelo incluem s para o modelo de memória “pequeno”, m para “médio”, l para “médio”, f para “plano” ( 32 bits ), c para “compacto” ou h para “grande”. A menos que você tenha certeza de que precisa dessa opção, você pode omiti-la.
-o nome do arquivoO nome da saída do arquivo executável compilado. Se o nome do arquivo não for especificado, o executável compilado será nomeado a.out .
-SProduz código fonte do assembler , mas para antes de realmente montar.
-U nome“Defina” qualquer macro previamente definida chamada name , no código-fonte ou especificada na linha de comando com -D .

variáveis ​​ambientais

As seguintes variáveis ​​de ambiente afetam o processo de compilação:

LANG
LC_CTYPE
LC_MESSAGES
LC_ALL
Essas variáveis ​​de ambiente controlam a maneira como o compilador usa informações de localização para trabalhar com diferentes convenções nacionais. Um valor comum é ” en_GB.UTF-8 ” para o idioma inglês codificado em UTF-8 . Se definida, a variável LC_ALL substitui todas as outras configurações de localidade.

Para visualizar suas configurações atuais de localidade, use o comando locale .

TMPDIRSe TMPDIR estiver definido, ele especificará o diretório a ser usado para arquivos temporários . O compilador usa arquivos temporários para manter a saída de um estágio de compilação que deve ser usado como entrada para o próximo estágio. Por exemplo, a saída do pré-processador, que é a entrada para o compilador real, é armazenada em um arquivo temporário durante o processo de compilação.
COMPILER_PATHUma lista de diretórios separados por dois pontos, bem como a variável PATH . O compilador procurará nesta lista de diretórios por subprogramas, se não puder encontrá-los usando o valor de GCC_EXEC_PREFIX .
LIBRARY_PATHUma lista de diretórios separados por dois pontos, muito parecido com PATH . Ao vincular, o compilador procurará nesta lista de diretórios bibliotecas vinculadas e arquivos vinculados especiais que não podem ser encontrados usando o valor de GCC_EXEC_PREFIX .
CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
Cada uma dessas variáveis ​​pode conter uma lista de diretórios separados por um caractere especial, como PATH , no qual o compilador procurará arquivos de cabeçalho. O caractere especial, PATH_SEPARATOR , depende do destino e é determinado no tempo de construção. Para a maioria dos destinos do Linux, PATH_SEPARATOR é dois pontos.

CPATH especifica uma lista de diretórios a serem pesquisados ​​como se especificados com a opção -I , mas após quaisquer caminhos fornecidos com a opção -I .

C_INCLUDE_PATH , CPLUS_INCLUDE_PATH e OBJC_INCLUDE_PATH se aplicam apenas ao pré-processamento do idioma específico indicado. Cada um deles especifica uma lista de diretórios a serem pesquisados ​​como se especificados com -isystem , mas após quaisquer caminhos fornecidos com as opções -isystem na linha de comandos.

Em todas essas variáveis, um elemento vazio instrui o compilador a procurar seu diretório de trabalho atual. Elementos vazios podem aparecer no início ou no final de um caminho. Por exemplo, se o valor de CPATH for : / special / include , isso terá o mesmo efeito que ” -I. -I / special / include “.

DEPENDENCIES_OUTPUTSe essa variável for configurada, seu valor especificará como gerar dependências para make com base nos arquivos de cabeçalho que não são do sistema processados ​​pelo compilador. Os arquivos de cabeçalho do sistema são ignorados na saída da dependência.

O valor de DEPENDENCIES_OUTPUT pode ser apenas um nome de arquivo; nesse caso, as regras Make são gravadas nesse arquivo, adivinhando o nome do destino a partir do nome do arquivo de origem. Ou o valor pode ter o formato ” arquivo de destino “; nesse caso, as regras são gravadas no arquivo de arquivo usando destino como o nome do destino.

Exemplos

  cc myfile.c

Compile o arquivo myfile.c . A saída será gravada no arquivo executável a.out .

  cc myfile.c -o myexe

Compile o arquivo myfile.c e nomeie o arquivo de saída executável compilado myexe .

  cc myfile.c -Wall -o myexe

Compile o arquivo myfile.c e exiba o executável compilado como myexe , exibindo avisos durante a compilação, se eles ocorrerem.

  cc myfile.c -Wall -lX11 -o myexe

Compile myfile.c com o executável myexe , vinculando a biblioteca libX11 e emitindo quaisquer avisos aplicáveis ​​durante a compilação.

  cc myfile.c -Wall -ansi -lX11 -o myexe

Compile myfile.c para o myexe executável, vinculando a biblioteca libX11 , seguindo estritamente os padrões ANSI C e emitindo avisos, se aplicável.

ld – Editor de links para arquivos de objetos.
ctags – Crie arquivos de tags para o código fonte.

14 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.