Mudanças entre as edições de "Link Dinâmico"
(Criou página com '== Links == Um link dinâmico tem como principal objetivo utilizar funções contidas em bibliotecas em tempo de execução, sem a necessidade de incorporar o conteúdo desta...') |
|||
Linha 13: | Linha 13: | ||
- Geração de código final | - Geração de código final | ||
A primeira, segunda, e terceira etapas utilizam de algoritmos desenvolvido na sua grande maioria sobre linguagens livre do contexto, de maneira a gerar um código intermediário | A primeira, segunda, e terceira etapas utilizam de algoritmos desenvolvido na sua grande maioria sobre linguagens livre do contexto, de maneira a gerar um código intermediário. Este processo consiste da tradução onde as instruções em símbolos utilizados pelo mecanismo do compilador. | ||
Em seguida, ocorre a otimização do código que trata, entre outras rotinas, de eliminar instruções desnecessárias quando possível. | Em seguida, ocorre a otimização do código que trata, entre outras rotinas, de eliminar instruções desnecessárias quando possível. | ||
Na geração do código final, as instruções são traduzidas em linguagem de maquina, geralmente Assembly, para que a maquina possa executá-las. | Na geração do código final, as instruções são traduzidas em linguagem de maquina, geralmente Assembly, para que a maquina possa executá-las. |
Edição das 17h08min de 14 de novembro de 2014
Links
Um link dinâmico tem como principal objetivo utilizar funções contidas em bibliotecas em tempo de execução, sem a necessidade de incorporar o conteúdo desta ao aplicativo desenvolvido, implicando em uma diminuição de tamanho do arquivo compilado e menos alocação de memória.
Estagios de compilação
A lista das etapas de compilação são[1]:
- Análise léxica - Análise sintática - Análise semântica - Geração de código intermediário - Optimização de código - Geração de código final
A primeira, segunda, e terceira etapas utilizam de algoritmos desenvolvido na sua grande maioria sobre linguagens livre do contexto, de maneira a gerar um código intermediário. Este processo consiste da tradução onde as instruções em símbolos utilizados pelo mecanismo do compilador. Em seguida, ocorre a otimização do código que trata, entre outras rotinas, de eliminar instruções desnecessárias quando possível. Na geração do código final, as instruções são traduzidas em linguagem de maquina, geralmente Assembly, para que a maquina possa executá-las.
Diferença entre linkedição dinâmica e estática
A diferença entre as duas a diferença básica entre criar um link dinâmico ou estático está na fase da compilação, pois para a linkedição estática, normalmente utilizam-se diretivas de compilação, para sinalizar que deve-se incorporar ao programa final instruções, protótipos de funções e outros detalhes pertinentes a execução de uma função não-nativa ao software. Isto gera crescimento do tamanho do arquivo final e problemas com dependência/incompatibilidade com as bibliotecas. Linkar dinamicamente, na realidade, é definir o endereço das funções da biblioteca que se utiliza, através de um protótipo abstraido para linguagem que está sendo utilizada.
Linkedição em C
Abaixo está um exemplo de como linkar dinamicamente uma biblioteca, as funções dlopen e dlsym encontram-se no header dlfcn.h: Admitâmos que deseja-se utilizar uma função com 3 parâmetros cuja seu retorno seja do tipo long.
int iDynamicLink(){ void *hLibHandle; char *pszLibPath = "/usr/include/liblinking.so"; long (*LinkedFunct)(int FirstParam, double SecondParam, char *ThirdParam); // Exemplo de funcao generica long lResult; if ( (hLibHandle = dlopen(pszLibPath, RTLD_LAZY)) == NULL ) return -1; LinkedFunct = (long (*)(int FirstParam, double SecondParam, char *ThirdParam)) dlsym(hLibCliSitef, "LikedFunct"); // Exemplo de utilizacao lResult = LinkedFunction(1, 3.2, "Exemplo"); return 0; }