Skip to main content

Tudo sobre o comando Linux / Unix: ld

How to Add/Delete Users and Groups, Change Password, Finger: Linux Administration Tutorial 18 (Junho 2026)

How to Add/Delete Users and Groups, Change Password, Finger: Linux Administration Tutorial 18 (Junho 2026)
Anonim

NOME

ld - Usando o LD, o vinculador GNU

SINOPSE

ld opções objfile …

DESCRIÇÃO

ld combina um número de arquivos de objeto e arquivo, realoca seus dados e liga referências a símbolos. Normalmente, o último passo na compilação de um programa é executarld.

ld aceita arquivos de Linguagem de Comando do Linker escritos em um superconjunto da sintaxe do Link Editor Command Language da AT & T, para fornecer controle explícito e total sobre o processo de vinculação.

Esta página do manual não descreve a linguagem de comandos; Veja old entrada em "info", ou o manual ld: o linker GNU, para detalhes completos sobre a linguagem de comando e sobre outros aspectos do linker GNU.

Esta versão dold usa as bibliotecas BFD de propósito geral para operar em arquivos de objetos. Isso permiteld para ler, combinar e gravar arquivos de objetos em muitos formatos diferentes - por exemplo, COFF ou "a.out". Diferentes formatos podem ser vinculados para produzir qualquer tipo de arquivo de objeto disponível.

Além de sua flexibilidade, o linker GNU é mais útil do que outros linkers no fornecimento de informações de diagnóstico. Muitos linkers abandonam a execução imediatamente ao encontrar um erro; quando possível,ld continua executando, permitindo identificar outros erros (ou, em alguns casos, obter um arquivo de saída apesar do erro).

O vinculador GNUld destina-se a cobrir uma ampla gama de situações e a ser o mais compatível possível com outros vinculadores. Como resultado, você tem muitas opções para controlar seu comportamento.

OPÇÕES

O vinculador suporta uma infinidade de opções de linha de comando, mas na prática real alguns deles são usados ​​em qualquer contexto específico. Por exemplo, um uso freqüente deld é vincular arquivos de objetos Unix padrão em um sistema Unix padrão suportado. Em tal sistema, para vincular um arquivo "hello.o":

eu faço /lib/crt0.o hello.o -lc

Isso informald para produzir um arquivo chamado saída como resultado da ligação do arquivo "/lib/crt0.o" com "hello.o" e da biblioteca "libc.a", que virá dos diretórios de busca padrão. (Veja a discussão do-eu opção abaixo.)

Algumas das opções de linha de comando parald pode ser especificado em qualquer ponto na linha de comando. No entanto, as opções que se referem a arquivos, como-eu ou-T, faça com que o arquivo seja lido no ponto em que a opção aparece na linha de comando, em relação aos arquivos de objeto e outras opções de arquivo. A repetição de opções que não são de arquivo com um argumento diferente não terá mais efeito ou substituirá as ocorrências anteriores (as que estão à esquerda na linha de comando) dessa opção. Opções que podem ser significativamente especificadas mais de uma vez são anotadas nas descrições abaixo.

Argumentos não-opcionais são arquivos-objetos ou arquivos que devem ser vinculados. Eles podem seguir, preceder ou ser misturados com opções de linha de comando, exceto que um argumento de arquivo de objeto não pode ser colocado entre uma opção e seu argumento.

Normalmente, o linker é invocado com pelo menos um arquivo de objeto, mas você pode especificar outras formas de arquivos de entrada binários usando-eu, -Re a linguagem de comandos de script. E se não os arquivos de entrada binários são especificados, o vinculador não produz nenhuma saída e emite a mensagemNenhum arquivo de entrada.

Se o vinculador não puder reconhecer o formato de um arquivo de objeto, ele assumirá que é um script de vinculador. Um script especificado desta maneira aumenta o script de vinculador principal usado para o link (o script de vinculador padrão ou aquele especificado usando-T). Esse recurso permite vincular o vinculador a um arquivo que parece ser um objeto ou um arquivo, mas na verdade apenas define alguns valores de símbolo ou usa "INPUT" ou "GROUP" para carregar outros objetos. Observe que especificar um script desta maneira apenas aumenta o script principal do vinculador; use o-T opção para substituir o script de vinculador padrão completamente.

Para opções cujos nomes são uma única letra, os argumentos da opção devem seguir a letra da opção sem espaços em branco intervenientes ou ser dados como argumentos separados imediatamente após a opção que os requer.

Para opções cujos nomes são várias letras, um traço ou dois podem preceder o nome da opção; por exemplo,-trace-symbol e- símbolo de rastreamento são equivalentes. Nota - há uma exceção a esta regra. Opções de várias letras que começam com um minúsculo 'o' só podem ser precedidas por dois traços. Isto é para reduzir a confusão com o-o opção. Então, por exemplo-omagia define o nome do arquivo de saída paraMagia enquanto que--omagia define o sinalizador NMAGIC na saída.

Os argumentos para opções de várias letras devem ser separados do nome da opção por um sinal de igual ou ser fornecidos como argumentos separados imediatamente após a opção que os requer. Por exemplo,- símbolo de rastreamento foo e--trace-symbol = foo são equivalentes. Abreviações exclusivas dos nomes das opções de várias letras são aceitas.

Nota - se o linker está sendo invocado indiretamente, através de um driver compiladorgcc) então todas as opções da linha de comando do linker devem ser prefixadas-Wl, (ou o que for apropriado para o driver do compilador em particular) assim:

gcc -Wl, - grupo inicial foo.o bar.o -Wl, - grupo final

Isso é importante, porque, do contrário, o programa do driver do compilador pode desativar silenciosamente as opções do vinculador, resultando em um link inválido.

Aqui está uma tabela das opções genéricas de linha de comando aceitas pelo linker GNU:

-uma palavra chave

Esta opção é suportada para compatibilidade com HP / UX. o palavra chave argumento deve ser uma das cordasarquivo, compartilhadooupadrão. -arquivo é funcionalmente equivalente a-Bestático, e as outras duas palavras-chave são funcionalmente equivalentes a-Binâmico. Esta opção pode ser usada qualquer número de vezes.

-UMA arquitetura

--arquitetura arquitetura

Na versão atual deld, esta opção é útil apenas para a família de arquiteturas Intel 960. Naquilold configuração, o arquitetura O argumento identifica a arquitetura específica na família 960, permitindo algumas salvaguardas e modificando o caminho de pesquisa da biblioteca de arquivos.

Versões futuras deld pode suportar funcionalidade semelhante para outras famílias de arquitetura.

-b Formato de entrada

--formato = Formato de entrada

ld pode ser configurado para suportar mais de um tipo de arquivo de objeto. Se seuld está configurado desta forma, você pode usar o-b opção para especificar o formato binário para os arquivos de objeto de entrada que seguem essa opção na linha de comando. Mesmo quandold está configurado para suportar formatos de objetos alternativos, você não precisa especificar isso,ld deve ser configurado para esperar, como formato de entrada padrão, o formato mais comum em cada máquina. Formato de entrada é uma cadeia de texto, o nome de um formato específico suportado pelas bibliotecas do BFD. (Você pode listar os formatos binários disponíveis comobjdump -i.)

Você pode querer usar esta opção se estiver ligando arquivos com um formato binário incomum. Você também pode usar-b para alternar formatos explicitamente (ao vincular arquivos de objeto de diferentes formatos), incluindo-b Formato de entrada antes de cada grupo de arquivos de objeto em um formato particular.

O formato padrão é obtido da variável de ambiente "GNUTARGET".

Você também pode definir o formato de entrada de um script, usando o comando "TARGET";

-c MRI-commandfile

--mri-script = MRI-commandfile

Para compatibilidade com linkers produzidos por MRI,ld aceita arquivos de script escritos em uma linguagem de comando restrita e alternativa, descrita na seção Arquivos de Script Compatíveis por MRI da documentação do GNU ld. Introduzir arquivos de script MRI com a opção-c; use o-T opção para executar scripts de linker escritos na pasta de propósito geralld linguagem de script. E se MRI-cmdfile não existe,ldprocura nos diretórios especificados por qualquer-EU opções.

-d

-dc

-dp

Essas três opções são equivalentes; vários formulários são suportados para compatibilidade com outros vinculadores. Eles atribuem espaço a símbolos comuns, mesmo se um arquivo de saída relocável for especificado (com-r). O comando de script "FORCE_COMMON_ALLOCATION" tem o mesmo efeito.

-e entrada

--entry = entrada

Usar entrada como o símbolo explícito para a execução inicial do programa, em vez do ponto de entrada padrão. Se não houver nenhum símbolo chamado entrada , o linker tentará analisar entrada como um número, e use isso como o endereço de entrada (o número será interpretado na base 10; você pode usar um0x para a base 16, ou um líder0 para a base 8).

-E

--exportar dinâmica

Ao criar um executável vinculado dinamicamente, adicione todos os símbolos à tabela de símbolos dinâmicos. A tabela de símbolos dinâmicos é o conjunto de símbolos que são visíveis a partir de objetos dinâmicos em tempo de execução.

Se você não usar essa opção, a tabela de símbolos dinâmicos normalmente conterá apenas os símbolos que são referenciados por algum objeto dinâmico mencionado no link.

Se você usar "dlopen" para carregar um objeto dinâmico que precisa se referir aos símbolos definidos pelo programa, em vez de algum outro objeto dinâmico, provavelmente será necessário usar essa opção ao vincular o próprio programa.

Você também pode usar o script de versão para controlar quais símbolos devem ser adicionados à tabela de símbolos dinâmicos se o formato de saída suportar. Veja a descrição de--version-script em @ ref {VERSION}.

-EB

Vincule objetos big-endian. Isso afeta o formato de saída padrão.

-EL

Vincule objetos little-endian. Isso afeta o formato de saída padrão.

-f

--auxiliar nome

Ao criar um objeto compartilhado ELF, defina o campo DT_AUXILIARY interno como o nome especificado. Isso informa ao vinculador dinâmico que a tabela de símbolos do objeto compartilhado deve ser usada como um filtro auxiliar na tabela de símbolos do objeto compartilhado nome .

Se, posteriormente, você vincular um programa a esse objeto de filtro, quando executar o programa, o vinculador dinâmico verá o campo DT_AUXILIARY. Se o vinculador dinâmico resolver qualquer símbolo do objeto de filtro, ele primeiro verificará se há uma definição no objeto compartilhado nome . Se houver, ele será usado no lugar da definição no objeto de filtro. O objeto compartilhado nome não precisa existir. Assim, o objeto compartilhado nome pode ser usado para fornecer uma implementação alternativa de determinadas funções, talvez para depuração ou para desempenho específico da máquina.

Esta opção pode ser especificada mais de uma vez. As entradas DT_AUXILIARY serão criadas na ordem em que aparecem na linha de comando.

-F nome

--filtro nome

Ao criar um objeto compartilhado ELF, defina o campo interno DT_FILTER como o nome especificado. Isso informa ao vinculador dinâmico que a tabela de símbolos do objeto compartilhado que está sendo criado deve ser usada como um filtro na tabela de símbolos do objeto compartilhado. nome .

Se, posteriormente, você vincular um programa a esse objeto de filtro, quando executar o programa, o vinculador dinâmico verá o campo DT_FILTER. O vinculador dinâmico resolverá os símbolos de acordo com a tabela de símbolos do objeto de filtro como de costume, mas, na verdade, vinculará às definições encontradas no objeto compartilhado nome . Assim, o objeto de filtro pode ser usado para selecionar um subconjunto dos símbolos fornecidos pelo objeto nome .

Alguns linkers mais antigos usavam-F opção ao longo de uma cadeia de ferramentas de compilação para especificar o formato do arquivo de objeto para os arquivos de objeto de entrada e saída. O linker GNU usa outros mecanismos para este propósito: o-b, --formato, --formato opções, o comando "TARGET" em scripts de link e a variável de ambiente "GNUTARGET". O vinculador GNU irá ignorar o-F opção ao não criar um objeto compartilhado ELF.

-fini nome

Ao criar um objeto ELF executável ou compartilhado, chame NAME quando o objeto executável ou compartilhado for descarregado, configurando DT_FINI para o endereço da função. Por padrão, o vinculador usa "_fini" como a função a ser chamada.

-g

Ignorado. Fornecido para compatibilidade com outras ferramentas.

-G valor

--gpsize = valor

Defina o tamanho máximo de objetos a serem otimizados usando o registro GP para Tamanho . Isso só é significativo para formatos de arquivo de objeto, como o MIPS ECOFF, que oferece suporte a colocar objetos grandes e pequenos em seções diferentes. Isso é ignorado para outros formatos de arquivo de objeto.

-h nome

-soname = nome

Ao criar um objeto compartilhado ELF, defina o campo DT_SONAME interno como o nome especificado. Quando um executável é vinculado a um objeto compartilhado que possui um campo DT_SONAME, quando o executável é executado, o vinculador dinâmico tentará carregar o objeto compartilhado especificado pelo campo DT_SONAME em vez de usar o nome do arquivo fornecido ao vinculador.

-Eu

Executar um link incremental (o mesmo que opção-r).

-nisso nome

Ao criar um objeto ELF executável ou compartilhado, chame NAME quando o objeto executável ou compartilhado for carregado, configurando DT_INIT para o endereço da função. Por padrão, o vinculador usa "_init" como a função a ser chamada.

-eu arquivo

--library = arquivo

Adicionar arquivo arquivo à lista de arquivos para vincular. Esta opção pode ser usada qualquer número de vezes.ld irá procurar em sua lista de caminhos por ocorrências de "libarchive.a" para cada arquivo Especificadas.

Nos sistemas que suportam bibliotecas compartilhadas,ld também pode pesquisar bibliotecas com extensões diferentes de ".a". Especificamente, nos sistemas ELF e SunOS,ld pesquisará em um diretório por uma biblioteca com uma extensão ".so" antes de procurar por uma com uma extensão ".a". Por convenção, uma extensão ".so" indica uma biblioteca compartilhada.

O vinculador pesquisará um arquivo apenas uma vez, no local em que ele for especificado na linha de comando. Se o arquivo definir um símbolo que foi indefinido em algum objeto que apareceu antes do arquivo na linha de comando, o vinculador incluirá o (s) arquivo (s) apropriado (s) do arquivo. No entanto, um símbolo indefinido em um objeto que aparece mais tarde na linha de comando não fará com que o vinculador pesquise o arquivo novamente.

Veja o-( opção para uma maneira de forçar o vinculador a pesquisar arquivos várias vezes.

Você pode listar o mesmo arquivo várias vezes na linha de comando.

Esse tipo de pesquisa de arquivamento é padrão para vinculadores do Unix. No entanto, se você estiver usandold onAIX, observe que é diferente do comportamento do vinculador AIX.

-EU searchdir

--library-path = searchdir

Adicionar caminho searchdir para a lista de caminhos queld irá procurar por bibliotecas de arquivos eld scripts de controle. Você pode usar essa opção quantas vezes quiser. Os diretórios são pesquisados ​​na ordem em que são especificados na linha de comando. Os diretórios especificados na linha de comando são pesquisados ​​antes dos diretórios padrão. Todos-EU opções se aplicam a todos-eu opções, independentemente da ordem em que as opções aparecem.

E se searchdir começa com "=", então o "=" será substituído pelo prefixo do sysroot , um caminho especificado quando o vinculador está configurado.

O conjunto padrão de caminhos pesquisados ​​(sem ser especificado com-EU) depende de qual modo de emulaçãold está usando e, em alguns casos, também como foi configurado.

Os caminhos também podem ser especificados em um script de link com o comando "SEARCH_DIR". Os diretórios especificados dessa maneira são pesquisados ​​no ponto em que o script de vinculador aparece na linha de comando.

-m emulação

Emular o emulação linker. Você pode listar as emulações disponíveis com o--verbose ou-Vopções.

Se o-m opção não é usada, a emulação é retirada da variável de ambiente "LDEMULATION", se isso for definido.

Caso contrário, a emulação padrão depende de como o vinculador foi configurado.

-M

--print-map

Imprima um mapa de links para a saída padrão. Um mapa de links fornece informações sobre o link, incluindo o seguinte:

*

Onde os arquivos e símbolos de objetos são mapeados na memória.

*

Como os símbolos comuns são alocados.

*

Todos os membros do arquivo incluídos no link, com uma menção ao símbolo que fez com que o membro do arquivo fosse inserido.

-n

--n mágico

Desative o alinhamento de páginas das seções e marque a saída como "NMAGIC", se possível.

-N

--omagia

Defina as seções de texto e dados para serem legíveis e graváveis. Além disso, não alinhe a página do segmento de dados e desative a vinculação a bibliotecas compartilhadas. Se o formato de saída suportar números mágicos de estilo Unix, marque a saída como "OMAGIC".

--no-omagic

Esta opção nega a maioria dos efeitos do-N opção. Ele define a seção de texto como somente leitura e força o segmento de dados a ser alinhado à página. Nota - esta opção não ativa a vinculação contra bibliotecas compartilhadas. Usar-Binâmico por esta.

-o saída

--output = saída

Usar saída como o nome do programa produzido porld; se esta opção não for especificada, o nome a.out é usado por padrão. O comando de script "OUTPUT" também pode especificar o nome do arquivo de saída.

-O nível

E se nível é um valor numérico maior que zerold otimiza a saída. Isso pode levar muito mais tempo e, portanto, provavelmente só deve ser ativado para o binário final.

-q

--emit-relocs

Deixe seções e conteúdos de realocação em exececutables totalmente vinculados. Ferramentas de análise e otimização de link de postagem podem precisar dessas informações para executar modificações corretas de executáveis. Isso resulta em executáveis ​​maiores.

Atualmente, esta opção é suportada apenas em plataformas ELF.

-r

- relocativável

Gerar saída relocável --- isto é, gerar um arquivo de saída que, por sua vez, pode servir como entrada parald. Isso é frequentemente chamado ligação parcial . Como efeito colateral, em ambientes que suportam números mágicos padrão do Unix, essa opção também define o número mágico do arquivo de saída como "OMAGIC". Se essa opção não for especificada, um arquivo absoluto será produzido. Ao ligar programas em C ++, esta opção não vou resolver referências a construtores; para fazer isso, use-Ur.

Quando um arquivo de entrada não possui o mesmo formato do arquivo de saída, a vinculação parcial é suportada apenas se esse arquivo de entrada não contiver nenhuma relocação. Diferentes formatos de saída podem ter restrições adicionais; por exemplo, alguns formatos baseados em "a.out" não suportam link parcial com arquivos de entrada em outros formatos.

Esta opção faz o mesmo que-Eu.

-R nome do arquivo

--just-symbols = nome do arquivo

Leia os nomes dos símbolos e seus endereços de nome do arquivo , mas não o relocalize ou inclua na saída. Isso permite que seu arquivo de saída se refira simbolicamente a locais absolutos de memória definidos em outros programas. Você pode usar essa opção mais de uma vez.

Para compatibilidade com outros linkers ELF, se o-R opção é seguida por um nome de diretório, em vez de um nome de arquivo, ele é tratado como-rpath opção.

-s

--strip-all

Omita todas as informações de símbolo do arquivo de saída.

-S

--strip-debug

Omita informações de símbolos do depurador (mas não todos os símbolos) do arquivo de saída.

-t

--vestígio

Imprima os nomes dos arquivos de entrada comold processa-os.

-T Arquivo de script

--script = Arquivo de script

Usar Arquivo de script como o script de vinculador. Este script substituildscript de link padrão (em vez de adicionar a ele), então arquivo de comando deve especificar tudo o que for necessário para descrever o arquivo de saída. E se Arquivo de script não existe no diretório atual, "ld" procura por ele nos diretórios especificados por qualquer-EU opções. Múltiplo-T opções se acumulam.

-você símbolo

--undefinido = símbolo

Força símbolo para ser inserido no arquivo de saída como um símbolo indefinido. Isso pode, por exemplo, acionar a vinculação de módulos adicionais de bibliotecas padrão.-você pode ser repetido com diferentes argumentos de opção para inserir símbolos adicionais indefinidos. Essa opção é equivalente ao comando de script do vinculador "EXTERN".

-Ur

Para qualquer coisa diferente de programas C ++, esta opção é equivalente a-r: gera saída relocável - isto é, um arquivo de saída que pode, por sua vez, servir como entrada parald. Ao ligar programas em C ++,-Ur faz resolver referências a construtores, ao contrário-r. Não funciona para usar-Ur em arquivos que estavam ligados a eles-Ur; depois que a tabela do construtor for criada, ela não poderá ser adicionada. Usar-Ur apenas para o último link parcial e-r para os outros.

--unique = SEÇÃO

Cria uma seção de saída separada para cada seção de entrada correspondente SEÇÃO ou, se o curinga opcional SEÇÃO argumento está faltando, para cada seção de entrada órfã. Uma seção órfã é uma que não é especificamente mencionada em um script de vinculador. Você pode usar esta opção várias vezes na linha de comando; Isso impede a mesclagem normal das seções de entrada com o mesmo nome, substituindo as atribuições da seção de saída em um script de vinculador.

-v

--versão

-V

Exibe o número da versão parald. o-V opção também lista as emulações suportadas.

-x

--discard-all

Exclua todos os símbolos locais.

-X

--discard-locals

Exclua todos os símbolos locais temporários. Para a maioria dos alvos, são todos os símbolos locais cujos nomes começam comeu.

-y símbolo

--trace-symbol = símbolo

Imprima o nome de cada arquivo vinculado no qual símbolo aparece. Esta opção pode ser dada qualquer número de vezes. Em muitos sistemas, é necessário preceder um sublinhado.

Essa opção é útil quando você tem um símbolo indefinido em seu link, mas não sabe de onde vem a referência.

-Y caminho

Adicionar caminho para o caminho de pesquisa da biblioteca padrão. Esta opção existe para compatibilidade com o Solaris.

-z palavra chave

As palavras-chave reconhecidas são "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" e "nocopyreloc". ". As outras palavras-chave são ignoradas para compatibilidade com o Solaris. "initfirst" marca o objeto a ser inicializado primeiro no tempo de execução antes de qualquer outro objeto."interpor" marca o objeto que sua tabela de símbolos interpõe antes de todos os símbolos, exceto o executável principal. "loadfltr" marca o objeto que seus arquivos são processados ​​imediatamente no tempo de execução. "nodefaultlib" marca o objeto que a busca por dependências deste objeto irá ignorar quaisquer caminhos de pesquisa de biblioteca padrão. "nodelete" marca o objeto não deve ser descarregado em tempo de execução. "nodlopen" marca o objeto não disponível para "dlopen". "nodump" marca o objeto não pode ser descartado por "dldump". "now" marca o objeto com a ligação de tempo de execução não-preguiçosa. "origin" marca o objeto pode conter $ ORIGIN. "defs" não permite símbolos indefinidos. "muldefs" permite múltiplas definições. "combreloc" combina várias seções de realocação e as ordena para tornar o cache de pesquisa de símbolo dinâmico possível.

"nocombreloc" desabilita múltiplas seções de relocação combinadas. "nocopyreloc" desabilita a produção de relocs de cópia.

-( arquivos -)

--start-group arquivos --end-group

o arquivos deve ser uma lista de arquivos compactados. Eles podem ser nomes de arquivos explícitos ou-euopções.

Os arquivos especificados são pesquisados ​​repetidamente até que não sejam criadas novas referências indefinidas. Normalmente, um arquivo é pesquisado apenas uma vez na ordem em que é especificado na linha de comando. Se um símbolo nesse archive for necessário para resolver um símbolo indefinido referido por um objeto em um archive que aparece posteriormente na linha de comando, o vinculador não poderá resolver essa referência. Ao agrupar os arquivos, todos eles serão pesquisados ​​repetidamente até que todas as referências possíveis sejam resolvidas.

Usar essa opção tem um custo de desempenho significativo. É melhor usá-lo somente quando houver referências circulares inevitáveis ​​entre dois ou mais arquivos.

- aceito-desconhecido-input-arch

--no-accept-unknown-input-arch

Diz ao vinculador para aceitar arquivos de entrada cuja arquitetura não pode ser reconhecida. A suposição é que o usuário saiba o que está fazendo e deliberadamente deseja vincular esses arquivos de entrada desconhecidos. Esse foi o comportamento padrão do vinculador, antes do release 2.14. O comportamento padrão do release 2.14 em diante é rejeitar esses arquivos de entrada, e assim- aceito-desconhecido-input-arch opção foi adicionada para restaurar o comportamento antigo.

-afirmar palavra chave

Esta opção é ignorada para compatibilidade com o SunOS.

-Binâmico

-dy

-call_shared

Vincule-se a bibliotecas dinâmicas. Isso só é significativo em plataformas para as quais as bibliotecas compartilhadas são suportadas. Esta opção é normalmente o padrão nessas plataformas. As diferentes variantes desta opção são para compatibilidade com vários sistemas. Você pode usar esta opção várias vezes na linha de comando: ela afeta a pesquisa na biblioteca-eu opções que o seguem.

-Bgroup

Defina o sinalizador "DF_1_GROUP" na entrada "DT_FLAGS_1" na seção dinâmica. Isso faz com que o vinculador de tempo de execução manipule pesquisas neste objeto e que suas dependências sejam executadas somente dentro do grupo.--no-undefined está implícito. Esta opção só é significativa em plataformas ELF que suportam bibliotecas compartilhadas.

-Bestático

-dn

-non_shared

-estático

Não vincule-se a bibliotecas compartilhadas. Isso só é significativo em plataformas para as quais as bibliotecas compartilhadas são suportadas. As diferentes variantes desta opção são para compatibilidade com vários sistemas. Você pode usar esta opção várias vezes na linha de comando: ela afeta a pesquisa na biblioteca-eu opções que o seguem.

-Bsymbolic

Ao criar uma biblioteca compartilhada, vincule referências a símbolos globais à definição dentro da biblioteca compartilhada, se houver. Normalmente, é possível que um programa vinculado a uma biblioteca compartilhada substitua a definição na biblioteca compartilhada. Esta opção só é significativa em ELFplatforms que suportam bibliotecas compartilhadas.

- secções de verificação

--no-check-sections

Pergunta ao linker não para verificar os endereços da seção depois de terem sido atribuídos para ver se há alguma sobreposição. Normalmente, o vinculador executará essa verificação e, se encontrar alguma sobreposição, produzirá mensagens de erro adequadas. O vinculador conhece e faz concessões para seções em sobreposições. O comportamento padrão pode ser restaurado usando o comutador de linha de comando- secções de verificação.

--cref

Saída de uma tabela de referência cruzada. Se um arquivo de mapeamento de vinculador estiver sendo gerado, a tabela de referência cruzada será impressa no arquivo de mapeamento. Caso contrário, é impresso na saída padrão.

O formato da tabela é intencionalmente simples, para que possa ser facilmente processado por um script, se necessário. Os símbolos são impressos, classificados por nome. Para cada símbolo, uma lista de nomes de arquivos é fornecida. Se o símbolo estiver definido, o primeiro arquivo listado é o local da definição. Os arquivos restantes contêm referências ao símbolo.

--no-define-common

Esta opção inibe a atribuição de endereços a símbolos comuns. O comando de script "INHIBIT_COMMON_ALLOCATION" tem o mesmo efeito.

o--no-define-common opção permite dissociar a decisão de atribuir endereços a símbolos comuns da escolha do tipo de arquivo de saída; Caso contrário, um tipo de saída não relocável força a atribuição de endereços a símbolos comuns. Usando--no-define-common permite que os símbolos comuns que são referenciados a partir de uma biblioteca compartilhada sejam atribuídos a endereços apenas no programa principal. Isso elimina o espaço duplicado não utilizado na biblioteca compartilhada e também evita qualquer confusão sobre a resolução para a duplicata incorreta quando há muitos módulos dinâmicos com caminhos de pesquisa especializados para resolução de símbolo de tempo de execução.

--defsym símbolo = expressão

Crie um símbolo global no arquivo de saída, contendo o endereço absoluto dado por expressão . Você pode usar essa opção quantas vezes forem necessárias para definir vários símbolos na linha de comando. Uma forma limitada de aritmética é suportada para o expressão neste contexto: você pode fornecer uma constante hexadecimal ou o nome de um símbolo existente, ou usar "+" e "-" para adicionar ou subtrair constantes hexadecimais ou símbolos. Se você precisar de expressões mais elaboradas, considere o uso da linguagem de comando do vinculador a partir de um script. Nota: não deve haver nenhum espaço em branco entre símbolo , o sinal de igual (``='') e expressão .

--demangle = estilo

--no-demangle

Essas opções controlam se os nomes de símbolos devem ser desmembrados em mensagens de erro e outras saídas. Quando o vinculador é instruído a desmembrar, ele tenta apresentar os nomes de símbolos de uma forma legível: ele retira os sublinhados principais se eles forem usados ​​pelo formato de arquivo objeto e converte nomes de símbolos mutilados em nomes legíveis pelo usuário. Compiladores diferentes têm diferentes estilos de mangling. O argumento opcional de estilo de desmembramento pode ser usado para escolher um estilo de desmancha apropriado para seu compilador. O vinculador irá demangle por padrão, a menos que a variável de ambienteCOLLECT_NO_DEMANGLE está definido. Essas opções podem ser usadas para substituir o padrão.

- linker dinâmico Arquivo

Defina o nome do vinculador dinâmico. Isso só é significativo ao gerar executáveis ​​ELF dinamicamente vinculados. O vinculador dinâmico padrão está normalmente correto; não use isso a menos que você saiba o que está fazendo.

--embedded-relocs

Esta opção só é significativa quando se liga o código PIC incorporado ao MIPS, gerado pela opção -membedded-pic ao compilador e assembler do GNU. Isso faz com que o vinculador crie uma tabela que pode ser usada em tempo de execução para realocar quaisquer dados que foram estaticamente inicializados para valores de ponteiro. Veja o código em testsuite / ld-empic para detalhes.

- avisosatais

Trate todos os avisos como erros.

--force-exe-suffix

Certifique-se de que um arquivo de saída tenha um sufixo .exe.

Se um arquivo de saída totalmente vinculado criado com êxito não tiver um sufixo ".exe" ou ".dll", essa opção força o vinculador a copiar o arquivo de saída para um dos mesmos nomes com um sufixo ".exe". Essa opção é útil ao usar makefiles Unix não modificados em um host Microsoft Windows, já que algumas versões do Windows não executam uma imagem a menos que ela termine com um sufixo ".exe".

- não-gc-seções

- seções -gc

Ative a coleta de lixo de seções de entrada não utilizadas. Ele é ignorado em destinos que não suportam essa opção. Esta opção não é compatível com-r, nem deve ser usado com links dinâmicos. O comportamento padrão (de não executar essa coleta de lixo) pode ser restaurado especificando- não-gc-seções na linha de comando.

--Socorro

Imprima um resumo das opções da linha de comando na saída padrão e saia.

--target-help

Imprima um resumo de todas as opções específicas de destino na saída padrão e saia.

-Mapa mapfile

Imprimir um mapa de links para o arquivo mapfile . Veja a descrição do-M opção acima.

--no-keep-memory

ld normalmente otimiza a velocidade sobre o uso da memória, armazenando em cache as tabelas de símbolos dos arquivos de entrada na memória. Esta opção informald para otimizar o uso da memória, relendo as tabelas de símbolos conforme necessário. Isso pode ser necessário seld fica sem espaço de memória ao vincular um executável grande.

--no-undefined

-z defs

Normalmente, ao criar uma biblioteca compartilhada não simbólica, os símbolos indefinidos são permitidos e deixados para serem resolvidos pelo carregador de tempo de execução. Essas opções não permitem tais símbolos indefinidos.

--allow-multiple-definition

-z muldefs

Normalmente, quando um símbolo é definido várias vezes, o vinculador relatará um erro fatal. Essas opções permitem várias definições e a primeira definição será usada.

--allow-shlib-undefined

Permitir símbolos indefinidos em objetos compartilhados, mesmo quando --no-undefined for definido. O resultado líquido será que os símbolos indefinidos em objetos regulares ainda dispararão um erro, mas os símbolos indefinidos em objetos compartilhados serão ignorados. A implementação de no_undefined pressupõe que o vinculador de tempo de execução irá sufocar em símbolos indefinidos. No entanto, há pelo menos um sistema (BeOS) onde os símbolos indefinidos em bibliotecas compartilhadas são normais, pois o kernel os corrige no momento do carregamento para selecionar qual função é a mais apropriada para a arquitetura atual. I.E. selecionar dinamicamente uma função memset apropriada. Aparentemente, também é normal que as bibliotecas compartilhadas HPPA tenham símbolos indefinidos.

--no-undefined-version

Normalmente, quando um símbolo tem uma versão indefinida, o vinculador irá ignorá-lo. Esta opção não permite símbolos com versão indefinida e um erro fatal será emitido em seu lugar.

--no-warn-mismatch

Normalmenteld dará um erro se você tentar unir arquivos de entrada que são incompatíveis por algum motivo, talvez porque eles foram compilados para diferentes processadores ou para diferentes necessidades de endianse. Esta opção informald que deveria silenciosamente permitir tais possíveis erros. Essa opção só deve ser usada com cuidado, nos casos em que você tenha tomado alguma ação especial que garanta que os erros do vinculador sejam inadequados.

--no-whole-archive

Desligue o efeito do- todo arquivo opção para arquivos archive subseqüentes.

--noinhibit-exec

Mantenha o arquivo de saída executável sempre que ele ainda puder ser usado.Normalmente, o vinculador não produzirá um arquivo de saída se encontrar erros durante o processo de vinculação; Ele sai sem gravar um arquivo de saída quando emite algum erro.

-nostdlib

Apenas os diretórios da biblioteca de pesquisa especificados explicitamente na linha de comando. Os diretórios de biblioteca especificados nos scripts do vinculador (incluindo scripts de vinculador especificados na linha de comando) são ignorados.

--formato Formato de saída

ld pode ser configurado para suportar mais de um tipo de arquivo de objeto. Se seuld está configurado desta forma, você pode usar o--formato opção para especificar o formato binário para o arquivo de objeto de saída. Mesmo quandold está configurado para suportar formatos de objetos alternativos, você não precisa especificar isso,ld deve ser configurado para produzir como formato de saída padrão o formato mais comum em cada máquina. Formato de saída é uma cadeia de texto, o nome de um formato específico suportado pelas bibliotecas do BFD. (Você pode listar os formatos binários disponíveis comobjdump -iO comando de script "OUTPUT_FORMAT" também pode especificar o formato de saída, mas esta opção a sobrescreve.

-qmagic

Esta opção é ignorada para compatibilidade com o Linux.

-Que

Esta opção é ignorada para compatibilidade com o SVR4.

--relaxar

Uma opção com efeitos dependentes da máquina. Esta opção é suportada apenas em alguns destinos.

Em algumas plataformas, o--relaxar opção executa otimizações globais que se tornam possíveis quando o vinculador resolve o endereçamento no programa, como modos de endereço relaxantes e sintetizando novas instruções no arquivo de objeto de saída.

Em algumas plataformas, essas otimizações globais de tempo de link podem impossibilitar a depuração simbólica do executável resultante. Este é o caso da família de processadores Matsushita MN10200 e MN10300.

Em plataformas onde isso não é suportado,--relaxar é aceito, mas ignorado.

--retain-symbols-file nome do arquivo

Reter só os símbolos listados no arquivo nome do arquivo , descartando todos os outros. nome do arquivo é simplesmente um arquivo simples, com um nome de símbolo por linha. Essa opção é especialmente útil em ambientes (como o VxWorks), onde uma grande tabela de símbolos globais é acumulada gradualmente para conservar a memória de tempo de execução.

--retain-symbols-file faz não descarte símbolos indefinidos ou símbolos necessários para realocações.

Você só pode especificar--retain-symbols-file uma vez na linha de comando. Substitui-s e-S.

-rpath dir

Adicione um diretório ao caminho de pesquisa da biblioteca de tempo de execução. Isso é usado ao vincular um ELFexecutable a objetos compartilhados. Todos-rpath Os argumentos são concatenados e passados ​​para o vinculador de tempo de execução, que os utiliza para localizar objetos compartilhados no tempo de execução. o-rpath opção também é usada ao localizar objetos compartilhados que são necessários por objetos compartilhados explicitamente incluídos no link; veja a descrição do-rpath-link opção. E se-rpath não é usado ao vincular um executável ELF, o conteúdo da variável de ambiente "LD_RUN_PATH" será usado se estiver definido.

o-rpath opção também pode ser usada no SunOS. Por padrão, no SunOS, o vinculador irá formar um patch de pesquisa em tempo de execução de todos os-EU opções que lhe são dadas. Se um-rpath opção é usada, o caminho de pesquisa de tempo de execução será formado exclusivamente usando o-rpath opções, ignorando o-EUopções. Isso pode ser útil ao usar o gcc, que adiciona muitos-EU opções que podem ser sistemas de arquivos montados em nFS.

Para compatibilidade com outros linkers ELF, se o-R opção é seguida por um nome de diretório, em vez de um nome de arquivo, ele é tratado como-rpath opção.

-rpath-link DIR

Ao usar ELF ou SunOS, uma biblioteca compartilhada pode exigir outra. Isso acontece quando um link "ld -shared" inclui uma biblioteca compartilhada como um dos arquivos de entrada.

Quando o vinculador encontra tal dependência ao fazer um link não compartilhado e não relocável, ele tentará localizar automaticamente a biblioteca compartilhada necessária e incluí-la no link, se não estiver incluída explicitamente. Nesse caso, o-rpath-link opção especifica o primeiro conjunto de diretórios a pesquisar. o-rpath-link opção pode especificar uma seqüência de nomes de diretório, especificando uma lista de nomes separados por dois pontos ou aparecendo várias vezes.

Essa opção deve ser usada com cuidado, pois ela substitui o caminho de pesquisa que pode ter sido compilado em uma biblioteca compartilhada. Nesse caso, é possível usar involuntariamente um caminho de pesquisa diferente do que o vinculador de tempo de execução faria.

O vinculador usa os seguintes caminhos de pesquisa para localizar as bibliotecas compartilhadas necessárias.

1.

Todos os diretórios especificados por-rpath-link opções.

2.

Todos os diretórios especificados por-rpath opções. A diferença entre-rpath e-rpath-link é que diretórios especificados por-rpath opções são incluídas no executável e usadas em tempo de execução, enquanto-rpath-link opção só é eficaz no momento do link. É apenas para o linker nativo.

3.

Em um sistema ELF, se o-rpath e as opções "rpath-link" não foram usadas, pesquise o conteúdo da variável de ambiente "LD_RUN_PATH". É apenas para o linker nativo.

4.

No SunOS, se o-rpath opção não foi usada, pesquise todos os diretórios especificados usando-EU opções.

5.

Para um vinculador nativo, o conteúdo da variável de ambiente "LD_LIBRARY_PATH".

6.

Para um vinculador ELF nativo, os diretórios em "DT_RUNPATH" ou "DT_RPATH" de uma biblioteca compartilhada são pesquisados ​​por bibliotecas compartilhadas necessárias por ele.As entradas "DT_RPATH" serão ignoradas se existirem entradas "DT_RUNPATH".

7.

Os diretórios padrão, normalmente / lib e / usr / lib .

8.

Para um vinculador nativo em um sistema ELF, se o arquivo /etc/ld.so.conf existe, a lista de diretórios encontrados nesse arquivo.

Se a biblioteca compartilhada requerida não for encontrada, o vinculador emitirá um aviso e continuará com o link.

-compartilhado

-Bshareable

Crie uma biblioteca compartilhada. Atualmente, isso é suportado apenas nas plataformas ELF, XCOFF e SunOS. No SunOS, o vinculador criará automaticamente uma biblioteca compartilhada se-e opção não é usada e existem símbolos indefinidos no link.

--sort comum

Esta opção informald para ordenar os símbolos comuns por tamanho quando os coloca nas seções de saída apropriadas. Primeiro vêm todos os símbolos de um byte, depois todos os dois bytes, depois todos os quatro bytes e depois todo o resto. Isso é para evitar lacunas entre os símbolos devido a restrições de alinhamento.

--split-by-file Tamanho

Igual a- split-by-reloc mas cria uma nova seção de saída para cada arquivo de entrada quando Tamanho é atingido. Tamanho O padrão é um tamanho de 1, se não for fornecido.

--split-por-reloc contagem

Tenta criar seções extras no arquivo de saída para que nenhuma seção de saída única contenha mais de contagem realocações. Isso é útil ao gerar enormes arquivos realocáveis ​​para download em determinados kernels em tempo real com o formato de arquivo de objeto COFF; já que o COFF não pode representar mais de 65535 realocações em uma única seção. Observe que isso não funcionará com formatos de arquivo de objeto que não suportam seções arbitrárias. O vinculador não dividirá seções de entrada individuais para redistribuição, portanto, se uma única seção de entrada contiver mais de contagem realocações uma seção de saída conterá muitas realocações. contagem O padrão é um valor de 32768.

--Estatísticas

Calcule e exiba estatísticas sobre a operação do vinculador, como tempo de execução e uso de memória.

- formato tradicional

Para alguns alvos, a saída deld é diferente em alguns aspectos da saída de algum vinculador existente. Esta troca solicitald para usar o formato tradicional.

Por exemplo, no SunOS,ld combina entradas duplicadas na tabela de string de símbolo. Isso pode reduzir o tamanho de um arquivo de saída com informações de depuração completas em mais de 30%. Infelizmente, o programa "dbx" do SunOS não pode ler o programa resultante ("gdb" não tem nenhum problema). o- formato tradicional interruptor dizld para não combinar entradas duplicadas.

--section-start Nome da Seção = org

Localize uma seção no arquivo de saída no endereço absoluto dado por org . Você pode usar essa opção quantas vezes forem necessárias para localizar várias seções na linha de comando. org deve ser um único inteiro hexadecimal; para compatibilidade com outros linkers, você pode omitir o0x geralmente associado a valores hexadecimais. Nota: não deve haver nenhum espaço em branco entre Nome da Seção , o sinal de igual (``='') e org .

-Tbss org

-Data org

-Texto org

Usar org como o endereço inicial para --- respectivamente --- o "bss", "data" ou o segmento "text" do arquivo de saída. org deve ser um único inteiro hexadecimal; para compatibilidade com outros linkers, você pode omitir o0x geralmente associado a valores hexadecimais.

--dll-verbose

--verbose

Exibe o número da versão parald e liste as emulações do linker suportadas. Exibe quais arquivos de entrada podem e não podem ser abertos. Exibe o script do vinculador que está sendo usado pelo vinculador.

--version-script = version-scriptfile

Especifique o nome de um script de versão para o vinculador. Isso é normalmente usado ao criar bibliotecas compartilhadas para especificar informações adicionais sobre a hierarquia de versões da biblioteca que está sendo criada. Esta opção só é significativa em plataformas ELF que suportam bibliotecas compartilhadas.

--warn-common

Avisa quando um símbolo comum é combinado com outro símbolo comum ou com uma definição de símbolo. Os linkers Unix permitem essa prática um tanto desleixada, mas os linkers em alguns outros sistemas operacionais não. Esta opção permite encontrar possíveis problemas ao combinar símbolos globais. Infelizmente, algumas bibliotecas C usam essa prática, portanto, você pode receber alguns avisos sobre símbolos nas bibliotecas, bem como em seus programas.

Existem três tipos de símbolos globais, ilustrados aqui por exemplos C:

int i = 1;

Uma definição, que vai na seção de dados inicializados do arquivo de saída.

extern int i;

Uma referência indefinida, que não aloca espaço. Deve haver uma definição ou um símbolo comum para a variável em algum lugar.

int i;

Um símbolo comum. Se houver apenas (um ou mais) símbolos comuns para uma variável, ela entrará na área de dados não inicializados do arquivo de saída. O vinculador mescla vários símbolos comuns para a mesma variável em um único símbolo. Se eles são de tamanhos diferentes, ele escolhe o tamanho maior. O vinculador transforma um símbolo comum em uma declaração, se houver uma definição da mesma variável.

o--warn-common opção pode produzir cinco tipos de avisos. Cada aviso consiste em um par de linhas: a primeira descreve o símbolo encontrado e a segunda descreve o símbolo anterior encontrado com o mesmo nome. Um ou ambos os dois símbolos serão um símbolo comum.

1.

Transformando um símbolo comum em uma referência, porque já existe uma definição para o símbolo.

(

): aviso: comum de `'substituído por definição (
): aviso: definido aqui

2.

Transformando um símbolo comum em uma referência, porque uma definição posterior para o símbolo é encontrada. Este é o mesmo que o caso anterior, exceto que os símbolos são encontrados em uma ordem diferente.

(

): aviso: definição de'comum comum (
): aviso: comum é aqui

3.

Mesclando um símbolo comum com um símbolo comum anterior do mesmo tamanho.

(

): aviso: múltiplo comum de `' (
): aviso: comum anterior está aqui

4.

Mesclando um símbolo comum com um símbolo comum maior anterior.

(

): aviso: comum de `'substituído por maior comum (
): aviso: maior comum é aqui

5.

Mesclando um símbolo comum com um símbolo comum menor anterior. Este é o mesmo que o caso anterior, exceto que os símbolos são encontrados em uma ordem diferente.

(

): aviso: comum de `'substituindo a menor (
): aviso: menor comum é aqui

- construtores de guerra

Avisa se algum construtor global é usado. Isso é útil apenas para alguns formatos de arquivo de objetos. Para formatos como COFF ou ELF, o vinculador não pode detectar o uso de construtores globais.

--warn-mu