“make & make install” no Linux

2

Eu trabalhei no Linux por um ano. Uma coisa me incomoda é que eu não estou familiarizado com o processo de instalação de novos softwares com código-fonte (não consigo instalá-los a partir do netword devido a limitações de ambiente).

Muitas vezes eu fui bloqueado com diferentes tipos de erros, por exemplo:

------------------------
libtool: install: error: relink 'Magick++/lib/libMagick++.la' with the above command before installing it
------------------------

ou

------------------------
magick/.libs/libMagickCore.so: undefined reference to 'gzseek64'
magick/.libs/libMagickCore.so: undefined reference to 'gztell64'
------------------------

Embora eu finalmente tenha encontrado uma solução no Google, não sei exatamente por que isso funciona.

Alguém pode me ajudar com essa situação ou me dar alguns conselhos sobre como me aperfeiçoar nesse tipo de coisa?

Estou com falta do conhecimento de "configure", "make", "diferença de 64 bits", "shared lib"; Alguém poderia me apontar na direção certa e me dar alguns livros ou artigos úteis?

    
por bluesea007 19.06.2010 / 09:05

1 resposta

2

Bem, os dois primeiros lugares para começar são o manual GNU make manual e o manual GNU autoconf. link e link Você não precisa entender tudo agora, mas lhe dará uma ideia do que está acontecendo nos bastidores.

Basicamente, quando você configura um programa, um arquivo make para o seu sistema é criado. Hoje, muito desenvolvimento de software é feito usando o código finalizado, o qual é empacotado e chamado de bibliotecas. Desta forma, os programadores não precisam se concentrar em algumas coisas que são muito importantes, mas ao mesmo tempo irrelevantes para o seu programa. Tome por exemplo interface gráfica do usuário. Nos programas de hoje é um mal necessário, porque não temos nada mais avançado no momento. Embora muitos programas precisem de interface gráfica, não é particularmente interessante para o programador que está fazendo o programa. Ele vai querer se concentrar em sua função principal. É por isso que as bibliotecas GUI são usadas com freqüência.

Quando você compila um programa, o compilador precisa saber onde encontrar todas as bibliotecas que o programa está usando. O make usará o makefile configurado pelo autoconf para dizer ao compilador onde encontrá-los. O Autoconf detectará seu sistema e configurará adequadamente o makefile.

Você também deve ter notado que o código-fonte dos programas está contido em muitos arquivos. Esses arquivos são geralmente compilados separadamente. Make também cuida da ordem em que esses arquivos precisam ser compilados. Depois que todos os arquivos são compilados, eles precisam ser vinculados em um programa. O Linker faz isso. No final, você obtém o arquivo executável que você pode chamar.

Outra coisa interessante é que não há necessidade de chamar o compilador manualmente. Make vai ligar e usar configurações apropriadas automaticamente.

Agora, sobre os erros que você está recebendo: Os erros de referência indefinidos são porque, de alguma forma, o autoconf configurou um makefile para o seu sistema sem detectar corretamente todas as dependências. Seu programa precisa que o zlib seja instalado corretamente antes de compilá-lo. O Autoconf deveria ter lhe dito isso, mas parece que você começou a fazer o compilador que não conseguiu encontrar o zlib e produz erros.

O primeiro erro é feito por causa de algo chamado compilação condicional. Basicamente, você pode dizer ao autoconf que você não quer usar uma parte do programa. Em seguida, o autoconf modifica o makefile de tal forma que uma parte do programa não é compilada. Parece-me que quando o Magick ++ foi compilado, algumas opções foram desativadas. É basicamente dizer que você precisa ativá-los.

Um pouco sobre bibliotecas compartilhadas. Uma vez que um programa usa uma biblioteca, ele pode ser usado como uma biblioteca estática, que é vinculada por isso é uma parte do programa ou como uma biblioteca dinâmica que não faz parte do programa. Bibliotecas estáticas são boas quando você quer um programa que não depende de mais nada, mas elas ocupam espaço na RAM e vários programas estão usando a mesma biblioteca, cada uma delas terá que carregá-la na RAM para seu próprio uso. As coisas são um pouco diferentes com bibliotecas dinâmicas. Depois que um programa é iniciado, ele carrega a biblioteca na RAM e a utiliza. A biblioteca não faz parte do programa, portanto, ela precisa ser instalada separadamente. No entanto, se vários programas estiverem usando a mesma biblioteca, ela só precisará ser carregada uma vez na RAM e a mesma cópia será usada por todos os programas. Isso é quase sempre usado com bibliotecas GUI.

No final, já que o seu computador não tem acesso à INTERNET, esteja preparado para muitos e muitos sofrimentos. Você nunca saberá quando algum programa precisa de alguma dependência obscura ou quando uma versão do programa que você instalou é incompatível com a versão que seu novo programa precisa.

    
por 19.06.2010 / 12:08

Tags