A que compilar e referenciar a linha?

1

Estou fazendo uma transição lenta do Windows para o Linux, então, por favor, tenha minhas consultas aparentemente simples. Ao instalar a biblioteca cudnn, me deparei com isso no arquivo INSTALL.txt :

Add [installpath] to your build and link process by adding -I[installpath] to your compile line and -L[installpath] -lcudnn to your link line.

O que compilar e vincular linha significa? Eu faço isso, enquanto compilo myFile.c que usa cudnn:

gcc myFile.c -L /path/to/library -l /name/of/library

Ou algo mais?

PS: Eles também mencionaram para fazer isso:

cd <installpath>
export LD_LIBRARY_PATH='pwd':$LD_LIBRARY_PATH

Mas não vou precisar escrever isso no meu arquivo .bashrc para que a variável de ambiente seja configurada toda vez que minha máquina for executada?

    
por James Bond 03.06.2017 / 13:45

2 respostas

2

Seu comando gcc combina a fase de compilação e link, então você precisa adicionar todas as opções dadas:

gcc -Iincludepath myFile.c -Llibpath -lcudnn

substituindo includepath e libpath conforme apropriado.

E, sim, você provavelmente desejará editar seu .bashrc para definir LD_LIBRARY_PATH :

export LD_LIBRARY_PATH=libpath:$LD_LIBRARY_PATH

substituindo libpath conforme apropriado.

includepath precisa apontar para os cabeçalhos ( .h files), libpath para a biblioteca ( .so ).

    
por 03.06.2017 / 17:36
0

Compilar e vincular são as duas principais etapas na criação de um executável. Ambos podem ser feitos com o comando gcc . Há também uma etapa de pré-processamento (antes da compilação) e uma montagem (após a compilação); estes são quase sempre feitos ao mesmo tempo que compilar, então a combinação "preprocess e compilar e depois montar" é tratada como uma única etapa chamada "compilação" para breve.

As etapas executadas por uma determinada linha de comando gcc podem ser determinadas da seguinte maneira:

Anote o pedido "preprocess, compile, assemble, link".

Se o arquivo de entrada tiver o nome *.i , remova a etapa de pré-processamento ( .i arquivos já estão pré-processados).

Se o arquivo de entrada tiver o nome *.s , remova as etapas de pré-processamento e compilação ( .s arquivos já estão compilados).

Se o arquivo de entrada tiver o nome *.o , remova as etapas de pré-processamento, compilação e montagem ( .o arquivos são montados).

Se houver uma opção -x , use-a em vez do nome do arquivo de entrada nas etapas anteriores. (Isso é raro)

Se a opção -c for usada, remova a etapa do link.

Se a opção -S for usada, remova as etapas de montagem e vinculação.

Se a opção -E for usada, remova as etapas de compilação, montagem e vinculação.

Em resumo, o tipo do arquivo de entrada determina onde você inicia na seqüência de pré-processamento-compilar-montagem-link e as opções -c / -S / -E determinam onde você para (elas solicitam arquivos de saída do tipo *.o , *.s e *.i , respectivamente - embora -E seja gerado para stdout por padrão).

Sua linha de comando não possui nenhuma das opções de tipo de saída e seu arquivo de entrada é denominado *.c , portanto, é uma linha de compilação e uma linha de link. Esta é uma maneira normal de compilar pequenos programas. Com programas maiores, você geralmente não quer compilar tudo de uma vez. É melhor salvar os arquivos *.o intermediários para reutilização e apenas recompilá-los quando o arquivo de origem for alterado.

O ciclo de desenvolvimento "recompilar conforme necessário" envolve comandos gcc -c para criar os arquivos *.o , geralmente um de cada vez, e um comando gcc *.o -o theprogram para fazer a vinculação. Esses comandos são comumente encontrados em um Makefile e são chamados de "linhas de compilação" e "linhas de link".

    
por 03.06.2017 / 18:16