Escrevendo programas de console em c linux. programação Linux. Como funciona a compilação

Ficou claro que o tema é muito relevante. Alguns erros e dúvidas foram levados em consideração, como resultado, decidiu-se realizar uma segunda master class. Adicionado e corrigido!

Programação master class em C no Linux. Estudamos a API principal.

Este tutorial destina-se a pessoas que desejam aprender a API *nix de sistemas operacionais semelhantes, em particular no Linux. Aqui vamos considerar os recursos de desenvolvimento no sistema operacional Linux, que incluem:


  • Familiarização com o processo de construção de software e as especificidades do compilador C do GCC

  • Desenvolvendo e usando bibliotecas compartilhadas

  • Programas de depuração

  • Explorando mecanismos de E/S de arquivo de baixo nível

  • Estudar mecanismos para garantir multitarefa e comunicação entre processos

  • Usando arquivos e soquetes de rede

  • Estudo e aplicação do mecanismo de sinais

  • O estudo de processos, threads, suas diferenças, o uso de multithreading, o estudo dos mecanismos de sincronização de threads e seus problemas

  • Criando daemons, aprendendo a diferença entre daemons e software aplicativo

  • Explorando os recursos de E/S do console

  • Arquivos mapeados na memória e como usá-los

Esta master class destina-se principalmente a desenvolvedores de software, engenheiros, programadores e apenas amadores interessados ​​no dispositivo e nas especificidades do sistema operacional Linux.

Requisitos para os participantes da master class: Conhecimento da linguagem C, ao nível do livro B.V. Kernighan, D. M. Ritchie "IDIOMA C".

O custo desta master class será de 6.000 rublos.

O local é a cidade de Moscou, nas instalações da Hackspace Neuron.
Datas: Aproximadamente de 4 de julho (segunda-feira), a 7 de julho (quinta-feira), das 10h às 17h, com intervalo para almoço e chá/café.

A transmissão online não está prevista.
Número de pessoas no grupo: 8-10.

A inscrição é por e-mail. [e-mail protegido] ou comente este post. Seu nome completo é necessário para o registro. (na íntegra) e dados de contacto (telefone e correio). É desejável descrever o objetivo de frequentar esta master class, o nível de formação e ocupação.

Programa detalhado do curso:

Módulo 1: Introdução


  • Familiarização com as especificidades da construção de software em GNU/Linux

  • Familiarização com editores de texto de console (vi, nano, mcedit)

  • Trabalhando com o depurador gdb

  • Montagem de software manual e automática (Makefile)

  • Modelo cliente-interface-servidor (CIS)

  • Edifício estático da biblioteca

  • Bibliotecas compartilhadas

  • Trabalhando com variáveis ​​de ambiente

Módulo 2: E/S de baixo nível e operações de arquivo

  • Visão geral dos mecanismos de E/S do Linux (Ubuntu)

  • Descritores de arquivo

  • Chamadas do sistema: abrir, fechar, escrever, ler e lseek

  • Tipos de arquivo

  • Inodes e links físicos

  • Permissões de arquivo

  • sistema de arquivos proc

  • Duas maneiras de ler o conteúdo de um diretório

  • Arquivos esparsos e especificidades de seu uso

  • Bloqueando áreas de um arquivo

Módulo 3

  • Mecanismos de comunicação entre processos do Linux (Ubuntu)

  • Tubos sem nome (tubos)

  • Pipes nomeados

  • Mensagens (fila de mensagens)

  • Memoria compartilhada

  • Semáforos

Módulo 4

  • Soquetes em um namespace de arquivo (soquetes UNIX)

  • Emparelhar soquetes

  • Soquetes de rede (soquetes)

Módulo 5. Sinais

  • Introdução aos Sinais

  • Como os sinais diferem de outros mecanismos de comunicação entre processos

  • Especificações do tratamento de sinais

  • Módulo 6

  • Processos de clonagem - fork()

  • Substituindo um processo em execução - exec()

  • Zumbis (zumbis) - causas e maneiras de eliminá-los

Módulo 7

  • Fios e processos

  • As especificidades da construção de aplicativos multithread (multithreading)

  • Terminar um tópico mais cedo

Módulo 8 - Tópicos (continuação)

  • Criar um manipulador de terminação de thread

  • Sincronizar primitivos

  • Atributos de transmissão

Módulo 9: Daemons (Serviços)

  • A diferença entre um daemon e um utilitário de console

  • Especificações de desenvolvimento de daemons

  • Criando um daemon usando soquetes de rede

Módulo 10: E/S do console

  • Especificidades do desenvolvimento de aplicativos de console

  • Evitando o redirecionamento de saída

  • Gerenciamento de terminais

  • Escondendo a senha do usuário durante a autenticação

  • Controle de terminal com sequências ESC

Módulo 11

  • Exibindo um arquivo normal

  • Compartilhando um arquivo

  • Exibições particulares

  • Outros usos do mmap

Módulo 12

  • Especificidades do desenvolvimento de aplicativos de 64 bits

  • Usando a biblioteca ncurses

Líder do curso: Sergey Dolin. Engenheiro eletrônico, desenvolvedor de software linux (aplicado, software de teste para hardware, drivers). Desenvolvedor de software embarcado. Programador Linux desde 2011. Trabalhou na OAO NICEVT, JSC Concern Systemprom, OOO PROSOFT (em uma subsidiária da Dolamant).

C é uma linguagem de programação bastante "antiga", foi formada no início dos anos 70. Apesar disso, C é uma linguagem viva no sentido de que é usada ativamente hoje. Ele foi concebido, usado e é usado para escrever partes essenciais do código do programa de sistemas operacionais do tipo Unix. Utilitários, compiladores e, menos frequentemente, programas de aplicativos também são escritos nele. Portanto, C é chamado de linguagem de programação do sistema.

Sua sobrevivência pode ser explicada pelo fato de que os princípios de operação dos sistemas operacionais são relativamente universais, não estando sujeitos ao progresso e diversidade que podem ser observados no ambiente de softwares desktop e mobile, aplicações Web. C não é uma linguagem de alto nível, está mais próxima da arquitetura do computador. Como resultado, os programas C são compactos e rápidos.

C não suporta programação orientada a objetos. O suporte OOP é implementado em C++. Embora esta última tenha evoluído da linguagem C, não é uma "sequência" dela, mas uma linguagem separada que pode ser aprendida sem conhecer C. No entanto, aprender C é útil antes de conhecer seu "irmãozinho avançado", porque a sintaxe das linguagens é semelhante, C não sobrecarrega o cérebro de um programador iniciante com superpoderes e os ensina a entender a essência do que está acontecendo.

C é bom para uma primeira introdução à programação? Se você não está estudando em uma universidade em uma especialidade relacionada a TI, então não. C implica uma compreensão da organização e dos princípios de operação do hardware, em particular da memória. Muito disso é feito com ponteiros, eles desempenham um papel fundamental; este tópico é bastante difícil de entender e geralmente não é estudado na escola.

Claro, com C, você pode aprender o básico de programação sem aprender sobre ponteiros. No entanto, uma pessoa pensará que conhece C, sabendo pouco sobre ela em si. A linguagem C foi criada por programadores profissionais experientes em hardware para escrever o sistema operacional UNIX. Não foi concebido como uma linguagem para o ensino de iniciantes.

Ambientes e compiladores para programação C

Se você estiver usando uma das distribuições GNU/Linux, qualquer editor de texto com realce de sintaxe servirá, e você também precisará do GCC e de um terminal.

Existem editores para programadores que incluem vários complementos, incluindo um terminal, navegação em diretórios e outros, por exemplo, Geany ou Atom.

C é uma linguagem de programação compilada. O GNU/Linux usa o GCC para obter arquivos executáveis, um conjunto de compiladores, incluindo um compilador para C. Para obter um arquivo executável de um arquivo fonte (geralmente esses arquivos recebem a extensão *.c), você precisa executar um comando em o terminal que se parece com isso:

gcc -o olá olá.c

Onde gcc é um comando que inicia um programa que executa a compilação e outras ações; -o é uma chave que indica que estamos especificando manualmente o nome do arquivo executável; hello é o nome do arquivo executável resultante; hello.c é o nome do arquivo de código-fonte. O nome do arquivo executável pode ser omitido:

gcc olá.c

Nesse caso, o executável terá o nome padrão a.out.

O Windows tem seu próprio conjunto de compiladores - MinGW. Ele pode ser usado sozinho, mas vem com um ambiente de desenvolvimento Dev-C++ simples, que pode ser uma boa opção para aprender a programar em C e C++.

Ao salvar, selecione o tipo de arquivo "Arquivos de origem C (*.c)". Compilar e executar o programa é feito pressionando a tecla F9. Após a execução, o programa fecha imediatamente e o resultado não pode ser visto. Para evitar que isso aconteça, duas linhas adicionais são escritas: #include e obter(). (Talvez isso não seja relevante para uma versão mais recente do Dev-C++.)

"Hello World" em GNU/Linux:

#incluir \n") ; }

"Olá Mundo" no Windows:

#incluir #incluir int main() ( printf("Olá Mundo \n"); obter(); )

Por outro lado, há um grande número de ambientes de desenvolvimento multiplataforma. Por exemplo, módulo Eclipse + CDT, KDevelop, CLion. Este último é pago, produzido pela JetBrains, líder em desenvolvimento de IDEs, mas tem um período de teste de 30 dias, o que pode ser suficiente para o aprendizado. O CLion é mais conveniente do que outros IDEs.

"Olá Mundo" em C

Usando o programa mais simples como exemplo, notamos imediatamente algumas características da linguagem de programação C.

Na linguagem C, a função main() assume o papel da ramificação principal do programa. Esta função deve estar sempre presente em um programa completo em C, e a execução do programa começa a partir dela. No entanto, as variáveis ​​declaradas dentro dele não são globais, seu escopo se estende apenas a main(). No entanto, na linguagem de programação C, quase todo o código do programa está contido em uma função, e a função main() é a função principal e obrigatória.

Por padrão, a função main() retorna um tipo de dados int, então você não precisa especificar o tipo de dados de retorno. No entanto, o compilador emite um aviso neste caso.

A função printf() é para saída de dados. Sua finalidade é semelhante ao procedimento write() em Pascal e a função print() em Python. A função printf() não quebra para uma nova linha após a saída. Portanto, um caractere especial é usado para pular, denotado pela combinação \n. Expressões C completas são separadas por ponto e vírgula.

Em C, as funções de E/S não fazem parte da linguagem. Por exemplo, em Python não precisamos importar nenhum módulo para usar as funções print() e input(). Em C, não podemos simplesmente chamar a função printf(), porque ele simplesmente não existe em C em si. Esta função, assim como várias outras, pode ser incluída usando o arquivo de cabeçalho stdio.h. Para isso, no início do programa, a linha #incluir . Include é traduzido do inglês como "include", e stdio é uma abreviação de "standard input-output (input-output)".

Arquivos de cabeçalho (terminam em *.h) geralmente contêm declarações de certas funções. Uma declaração é simplesmente uma descrição de uma função: quais parâmetros ela recebe e o que ela retorna. O código da função em si (definição) não está no arquivo de cabeçalho, mas em bibliotecas (outros arquivos) que podem já estar compiladas e localizadas nos diretórios do sistema. Antes de compilar o programa, é iniciado o pré-processador C. Entre outras coisas, inclui o conteúdo dos arquivos de cabeçalho especificados no arquivo de programa no início do arquivo de programa.

Trabalho prático

Comente a primeira linha do código do programa HelloWorld. Tente compilar o programa. Você conseguiu obter o executável? Qual aviso o compilador emitiu?

1 // - comentário de linha única na linguagem C; /* … */ - comentário de várias linhas em linguagem C.

Muitos programadores iniciantes têm medo
programação linux - sem simplicidade do Windows
e visibilidade. No entanto, para Linux existe
muitos recursos visuais
programação, e não é apenas um clone do Delphi.
Claro, eles não podem se tornar completos
um substituto para o mesmo Visual Studio, mas bastante
ajudar a acelerar o processo de desenvolvimento
programas.

NetBeans

Um dos melhores IDEs. Destinado a
trabalhar com Java, com sua ajuda você pode
desenvolver não apenas multiplataforma
programas Java, mas também aplicações web, serviços web e
clientes para eles, programas J2ME, etc. Pode ser
trabalhar em Windows, Linux, MacOS. IDE pode ser estendido
vários plugins e addons que você pode
encontrar no site. Ao mesmo tempo - tudo é grátis, então
comer de graça! Em geral - um número indiscutível
1.

QT/KDevelop Designer

Outro ambiente de desenvolvimento poderoso para
Plataforma KDE e Gnome. C++ multiplataforma
aplicações vão apenas de uma maneira. Por
programas Qt não comerciais podem
use grátis, existe
para quase todas as distribuições.

Clone do Visual Basic, e não apenas no design,
mas também nas construções da linguagem. Ideal
ferramenta para programadores VB que desejam
mudar para Linux. Interface simples e amigável.
Acesso a todos os principais bancos de dados - MySQL,
PostgreSQL etc. Funciona em quase todos
distribuições.

Editor WYSIWYG para criação de páginas web. Dentro
muito parecido com o editor Macromedia ou qualquer outra coisa
o mesmo FrontPage. Suporta automático
trabalhar com o site via FTP.

Python e Ruby IDE que faz
programando em uma linguagem bem simples
e emocionante. Escrito em sua própria
Pitão.

Eclipse não é um IDE, mas uma plataforma completa para
várias aplicações. para o padrão
entrega inclui plug-ins adicionais para
Suporte à linguagem Java (JDT) e desenvolvimento
plugins para Eclipse (PDE - Plugin Development Environment). Por
trabalhar com outras línguas deve ser
plugins especiais instalados - no Eclipse
pode trabalhar em quase qualquer
linguagem de programação acessível. Outro
vantagem também se aplica a
extensibilidade: quantidade gigantesca
utilitários (especialmente para Java) agora
também disponível como plugins para Eclipse,
por exemplo, Ant, JavaDoc, JUnit, JDepend, Check Style, Subversion.
Então não temos que desistir
seu sistema de controle de versão, de seus
verificadores de qualidade de código, etc.
A terceira vantagem é que o Eclipse é
ambiente multiplataforma, ou seja,
Existem versões para vários
sistemas operacionais (que não podem
pagar o mesmo Visual Studio).

JDeveloperName

Plataforma da Oracle - não de código aberto,
no entanto, ainda é gratuito. Como fica claro de
nomes ainda são usados ​​pela mesma plataforma cruzada
Java. Usa o Sun JDK para executar, então
Oracle não reivindica o criado
programas em teoria não terão.

E, finalmente, o ambiente de controle visual
projetos para o Gnome Desktop. Não menos útil
programa para programadores do que IDE.

As ferramentas tradicionalmente usadas para escrever programas para sistemas operacionais abertos são as ferramentas de desenvolvedor GNU. Vamos fazer um pouco de fundo histórico. O Projeto GNU foi fundado em 1984 por Richard Stallman. Sua necessidade se deveu ao fato de que naquela época a cooperação entre programadores era difícil, uma vez que os proprietários de softwares comerciais colocavam inúmeros obstáculos a tal cooperação. O objetivo do projeto GNU era criar um conjunto de software sob uma única licença que não permitiria a ninguém atribuir direitos exclusivos a este software. Parte deste kit é o kit de ferramentas do desenvolvedor que usaremos, que deve ser incluído em todas as distribuições Linux.

Uma dessas ferramentas é o compilador GCC. Este acrônimo originalmente significava GNU C Compiler. Agora significa - GNU Compiler Collection.

Vamos criar o primeiro programa usando o GCC. Por tradição, o primeiro programa simplesmente imprimirá a saudação "Hello world!" - "Olá Mundo!".

Os arquivos de código fonte para os programas que estaremos criando são arquivos de texto simples e podem ser criados usando qualquer editor de texto (por exemplo, GEdit KWrite, Kate e os usuários Linux mais tradicionais vi e emacs). Além dos editores de texto, existem ambientes de desenvolvimento especializados com seus próprios editores integrados. Uma dessas ferramentas é o KDevelop. Curiosamente, ele possui um editor embutido e um console embutido localizado logo abaixo do editor. Assim você pode diretamente em um programa, sem alternar entre janelas, e editar o código e dar comandos de console.

Crie um diretório hello separado. Este será nosso primeiro diretório de projeto. Nele, crie um arquivo de texto hello.c com o seguinte texto:

#incluir

printf("Olá mundo!\n");

Em seguida, no console, vá para o diretório do projeto. Ligue para uma equipe

Agora observe atentamente o que aconteceu. Um novo arquivo a.out apareceu no diretório. Este é o arquivo executável. Vamos lançá-lo. Digite no console:

O programa deve iniciar, ou seja, o texto deve aparecer:

O compilador gcc atribui o nome a.out a todos os executáveis ​​gerados por padrão. Se você quiser nomeá-lo de maneira diferente, precisará adicionar o sinalizador -o e o nome que deseja nomeá-lo ao comando de compilação. Vamos digitar o seguinte comando:

gcc hello.c -o hello

Vemos que um arquivo executável chamado hello apareceu no diretório. Vamos lançá-lo.

Como você pode ver, o resultado é exatamente o mesmo arquivo executável, apenas com um nome conveniente para nós.

O sinalizador -o é apenas um dos muitos sinalizadores do compilador gcc. Algumas outras bandeiras serão discutidas posteriormente. Você pode usar o sistema de ajuda do homem para ver todos os sinalizadores possíveis. Digite na linha de comando:

Você será presenteado com um sistema de ajuda para este programa. Revise o que cada sinalizador significa. Em breve conheceremos alguns deles. O sistema de ajuda é encerrado com a tecla q.

Claro, você notou que quando executamos um programa do nosso diretório de desenvolvimento, digitamos um ponto e uma barra antes do nome do arquivo. Por que estamos fazendo isso?

O fato é que se digitarmos apenas o nome do arquivo executável, o sistema operacional o procurará nos diretórios /usr/bin e /usr/local/bin e, claro, não o encontrará. Os diretórios /usr/bin e /usr/local/bin são os diretórios do sistema onde os programas executáveis ​​estão localizados. O primeiro é projetado para hospedar versões estáveis ​​de programas, geralmente incluídos em uma distribuição Linux. O segundo é para programas instalados pelo próprio usuário (cuja estabilidade ninguém garante). Tal sistema é necessário para separá-los uns dos outros. Por padrão, os programas são instalados no diretório /usr/local/bin quando são compilados. É altamente indesejável colocar qualquer coisa extra em /usr/bin ou excluir qualquer coisa de lá manualmente, porque isso pode levar a uma falha do sistema. Devem ser colocados programas, para cuja estabilidade os desenvolvedores da distribuição são responsáveis.

Para executar um programa localizado em outro lugar, você deve especificar o caminho completo para ele, assim:

/home/dima/projects/hello/hello

Ou outra opção: escreva o caminho relativo ao diretório atual no qual você está atualmente no console. Nesse caso, um ponto significa o diretório atual, dois pontos - o pai. Por exemplo, o comando ./hello executa o programa hello localizado no diretório atual, o comando ../hello executa o programa hello localizado no diretório pai, o comando ./projects/hello/hello executa o programa em subdiretórios localizados dentro o diretório atual.

É possível adicionar diretórios adicionais à lista de caminhos do sistema para programas. Para fazer isso, adicione um novo caminho à variável de sistema PATH. Mas não vamos fugir do assunto principal por enquanto. As variáveis ​​de ambiente são uma conversa separada.

Agora vamos ver o que o programa gcc faz. Seu trabalho inclui três etapas: pré-processamento, compilação e vinculação (ou vinculação).

O pré-processador inclui o conteúdo de todos os arquivos de cabeçalho especificados nas diretivas #include no arquivo principal. Os arquivos de cabeçalho geralmente contêm declarações de funções usadas no programa, mas não definidas no texto do programa. Suas definições estão em outro lugar: em outros arquivos de origem ou em bibliotecas binárias.

A segunda etapa é a compilação. Consiste em transformar o texto do programa na linguagem C/C++ em um conjunto de instruções de máquina. O resultado é armazenado em um arquivo objeto. Obviamente, em máquinas com arquiteturas de processador diferentes, os binários são obtidos em formatos diferentes e, em uma máquina, é impossível executar um binário construído em outra máquina (a menos que tenham a mesma arquitetura de processador e os mesmos sistemas operacionais). É por isso que os programas para sistemas do tipo UNIX são distribuídos como códigos-fonte: eles devem estar disponíveis para todos os usuários, independentemente de quem possui qual processador e qual sistema operacional.

A última etapa é o layout. Ele consiste em vincular todos os arquivos de objeto em um projeto em um, vincular chamadas de função a suas definições e anexar arquivos de biblioteca contendo funções que são chamadas, mas não definidas no projeto. Como resultado, um arquivo executável é formado - nosso objetivo final. Se uma função for usada em um programa, mas o linker não encontrar o local onde esta função está definida, ele emitirá uma mensagem de erro e se recusará a criar um arquivo executável.

Agora vamos ver como tudo fica na prática. Vamos escrever outro programa. Será a calculadora mais primitiva capaz de somar, subtrair, multiplicar e dividir. Quando lançado, ele solicitará dois números por vez para operar e, em seguida, solicitará que você insira o sinal da operação aritmética. Pode ter quatro caracteres: "+", "-", "*", "/". Depois disso, o programa exibe o resultado e para (retorna-nos ao sistema operacional, ou melhor, ao interpretador de comandos do qual chamamos o programa).

Vamos criar uma nova pasta kalkul para o projeto e criar o arquivo kalkul.c nela.

#incluir

printf("Primeiro numero: ");

scanf("%f",&num1);

printf("Segundo numero: ");

scanf("%f",&num2);

printf(" Operador (+ - * /): ");

while ((op = getchar()) != EOF)

printf("%6.2f\n", num1 + num2);

senão if(op == "-")

printf("%6.2f\n", num1 - num2);

senão if(op == "*")

printf("%6.2f\n", num1 * num2);

senão if(op == "/")

printf("Erro: divisão por zero!\n");

parar;

printf("%6.2f\n", num1 / num2);

Então, em primeiro lugar, como foi dito, o pré-processamento é realizado. Para ver o que está sendo feito nesta etapa, usaremos a opção -E. Esta opção interrompe a execução do programa no estágio de processamento pelo pré-processador. O resultado é um arquivo de código-fonte com o conteúdo dos arquivos de cabeçalho incluídos nele.

No nosso caso, incluímos um arquivo de cabeçalho - stdio.h - uma coleção de funções de E/S padrão. Essas funções enviam o texto desejado para o console e também lêem as palavras que digitamos no console.

Digite o seguinte comando:

gcc -E kalkul.c -o kalkul.cpp

Chamamos o arquivo resultante de kalkul.cpp. Abra. Por favor, note que é bastante longo. Isso porque incluiu todo o código no arquivo de cabeçalho stdio.h. Além disso, o pré-processador adicionou algumas tags aqui que informam ao compilador como se comunicar com as funções declaradas. O texto principal do nosso programa é visível apenas na parte inferior.

Você também pode ver quais outras funções são declaradas no arquivo de cabeçalho stdio.h. Se você quiser informações sobre uma função em particular, você pode perguntar sobre isso no built-in man. Por exemplo, se você de repente quiser saber o que a função misteriosa fopen faz, você pode digitar:

Há também muitas informações nas informações do sistema de ajuda.

Você também pode perguntar sobre todo o arquivo de cabeçalho de uma só vez.

Vejamos agora a próxima etapa. Vamos criar um arquivo objeto. Um arquivo objeto é uma tradução "literal" do nosso código de programa em linguagem de máquina, mas sem vincular as funções chamadas com suas definições. A opção -c é usada para gerar um arquivo objeto.

O nome do arquivo resultante pode ser omitido, pois o compilador simplesmente pega o nome do arquivo fonte e altera a extensão .c para .o (você pode especificar se queremos nomeá-lo de forma diferente).

Se estivermos criando um arquivo objeto de uma fonte que já foi processada pelo pré-processador (como a que obtivemos acima), devemos indicar explicitamente que o arquivo que está sendo compilado é um arquivo de código-fonte que foi processado pelo pré-processador e tem tags de pré-processador. Caso contrário, será processado como um arquivo C++ normal, sem tags de pré-processador, o que significa que o relacionamento com as funções declaradas não será estabelecido. A opção -x é usada para indicar explicitamente o idioma e o formato do arquivo que está sendo processado. O arquivo C++ processado pelo pré-processador é indicado por cpp-output.

gcc -x cpp-output -c kalkul.cpp

Por fim, o último passo é o layout. Obtemos o executável do arquivo objeto.

gcc kalkul.o -o kalkul

Você pode executá-lo.

Você pergunta: “Por que todo esse barulho com etapas intermediárias? Não seria melhor apenas executar gcc kalkul.c -o kalkul uma vez?"

O fato é que programas reais raramente consistem em um único arquivo. Como regra, existem vários arquivos de origem e eles são combinados em um projeto. E em alguns casos excepcionais, o programa deve ser montado a partir de várias partes escritas em diferentes idiomas. Nesse caso, você deve executar compiladores de diferentes linguagens para que cada um obtenha um arquivo objeto de sua fonte e, em seguida, vincule esses arquivos objeto resultantes a um programa executável.

Dmitry Panteleichev (dimanix2006 em rambler dot ru) - Introdução ao compilador GCC

Caixa de areia

quartel de Adão 15 de março de 2014 às 13h20

Aprendizagem C++. E se você começar no Linux?

Fervido!

No sistema atual de educação escolar, a nitidez para o sistema operacional da Microsoft é incrível: com raras exceções, você pode ver algo como Edubuntu ou russo ALT Linux em algum lugar, mas fora isso é o Windows. Na minha opinião, é mais do que tempo de familiarizar as crianças nas escolas com uma visão diferente do que deve ser a interface entre o homem e o hardware, e não procurar formas comuns. Talvez essa visão analítico-comparativa das coisas ajude a aumentar o nível extremamente baixo de alfabetização em informática entre os graduados da escola que não podem nem mesmo formatar um texto em Word ou fazer uma boa apresentação em PowerPoint.

É sinceramente surpreendente que nas escolas seja considerado supercomplexo e até místico compilar arrays bidimensionais no mesmo Pascal "e, que, aliás, também está muito atrasado para ser substituído por um Python mais flexível e conveniente ou JavaScript Caros professores, qual deve ser a motivação do aluno se não aprendemos primeiro eslavo e depois russo e outros para reforçar as regras da gramática, então que diabos?!

Dada a profissão da moda de programador e um certo romantismo na mente dos jovens, inspirados no cinema de Hollywood, as pessoas ingressam nas universidades e enfrentam uma série de dificuldades: sua cabeça começa a se expandir dramaticamente, o que inevitavelmente leva primeiro ao cansaço e depois ao decepção em sua escolha. O fato permanece: se você se associa a uma profissão que exige autoaperfeiçoamento constante, comece a fazer isso antes mesmo de entrar. Existem muitos materiais que o ajudarão a estar mais preparado no processo de estudo e permitirão que você encontre um emprego em sua especialidade no 3-4º ano de estudo. Jogada!

Diante de tal raciocínio, ela me procurou para fazer um pequeno tutorial sobre como escrever, compilar e executar um programa C++ no Linux sem ferramentas especiais (IDE). Essa abordagem apresentará o programador iniciante ao processo de desenvolvimento da maneira mais trivial, bem como ao sistema operacional Linux, que é fundamentalmente novo para ele. No final do meu habrapost, escreverei uma bibliografia e links úteis.

Vamos começar com o que precisamos:
-Distribuição Linux (pegue Ubuntu);
-Compilador g++ instalado;
-Editor de texto normal (gedit);
-Terminal;

Vai!

1. Instalando o Linux e o software necessário.
Baixe do site oficial ubuntu.ru a imagem da distribuição Linux Ubuntu. Também gostaria de acrescentar que não recomendo o uso do Wubi. Fazemos uma instalação normal em nosso disco rígido ou em uma máquina virtual. Gravamos a imagem em disco usando Nero ou ImgBurn. Reiniciamos e entramos no BIOS, onde precisamos definir a prioridade de inicialização da unidade de CD / DVD. Salvamos as configurações e saímos. Inicializamos a partir do disco e instalamos o sistema operacional. (Mais informações estarão no link abaixo). Editor de texto, temos um terminal por padrão. Para instalar o compilador g++, abra um terminal com alt+ctrl+T e digite: sudo apt-get install g++ . Seremos solicitados a digitar uma senha, digite, pressione Enter. Preparar.
2. Criando um arquivo cpp.
Abra a pasta inicial no gerenciador de arquivos do Nautilus e em paralelo abra o terminal alt + ctrl + t. Nele escrevemos o comando touch helloworld.cpp. O comando touch criará um arquivo com o nome desejado. Agora você pode minimizar o terminal e focar no Nautilus "e. Abra nosso arquivo e escreva o código mais popular do mundo:

#incluir usando o namespace std; int main()( cout<< "Hello world!"; return 0; }

Feche, salve.

3. Compilação e lançamento.
Abra o terminal novamente e chame nosso compilador com g++ -lm -o output helloworld.cpp . g++ é nosso próprio compilador, e -lm e -o são as opções de switch com as quais o executamos. output - ter um arquivo de saída onde é colocado o resultado da nossa compilação, seguido do nome do nosso arquivo cpp. Pressione enter, se o programa estiver correto, não haverá mensagens. Agora, para executar o programa, digite o seguinte no terminal: ./output e pressione enter. A tela exibe o resultado "Hello world!".
Então você escreveu seu primeiro programa C++ para Linux! Felicito-o e desejo-lhe sucesso na educação versátil e de alta qualidade. Sua competência está em suas mãos, lembre-se disso.

P.S. Se pelo menos um aluno fizer o que escrevi, considerarei que minha missão está cumprida. Tudo de bom!
P.S.S. Links.