comando do ld
Propósito
Links de objetos de links.
Sintaxe
ld [ -D Number ] [ -e Label ] [ -G ] [ -H Number ] [ -K ] [ -m ] [ -M ] [ -o Name ] [ -r ] [ -s ] [ -S Number ] [ -T Number ] [ -u Name ] ... [ -v ] [ -V ] [ -z ] [ -Z String ] ... [ -b Option ] ... [ -L Directory ] ... { -f FileID ... -l Name ... InputFile ... }ould -bsvr4 [ -d[y | n] ] [ -D Number ] [ -e Label ] [ -G ] [ -H Number ] [ -K ] [ -m ] [ -M ] [ -o Name ] [ -r ] [ -R Path ] [ -s ] [ -S Number ] [ -T Number ] [ -u Name ] ... [ -v ] [ -V ] [ -z [ defs | nodefs ] ] [ -z multidefs ] [ -z [text | nowarntext | warntext ] ] ] [ -Z String ] ... [ -b Option ] ... [ -L Directory ] ... { -f FileID ... -l Name ... InputFile ... }Descrição
O comando ld que também é chamado de editor de ligação ou componente de ligação, combina arquivos de objeto, archives e arquivos de importação em um arquivo de objeto de saída, resolvendo referências externas Ele produz um arquivo de objeto executável que pode ser executado. Além disso, se você especificar o comando ld sem a sinalização -s , poderá usar o arquivo de saída como um parâmetro InputFile em outra chamada para o comando ld . Por padrão, o comando ld cria e coloca sua saída no arquivo a.out .
O comando ' ld pode revincular um programa sem exigir que você liste todos os arquivos de objeto de entrada novamente. Por exemplo, se um arquivo de objeto de um programa grande for alterado, você poderá revincular o programa listando o novo arquivo de objeto e o programa antigo na linha de comando, juntamente com todas as bibliotecas compartilhadas exigidas pelo programa. Consulte Exemplos..
O comando ld vincula arquivos de entrada na ordem especificada na linha de comandos. Se você especificar um arquivo mais de uma vez, apenas a primeira ocorrência do arquivo será processada. Especifique pelo menos um arquivo de entrada, com o sinalizador -bI (letra maiúscula i), -bimport, -bkeepfile, -fou -l (letra minúscula L) ou como um parâmetro InputFile . (O sinalizador ' -bI, ' -bimport ou ' -bkeepfile é o sinalizador ' -b usado com a opção ' I, ' import ou ' keepfile )
Use o comando cc para vincular arquivos quando estiver produzindo programas que são executados no sistema operacional. Como o comando cc chama o comando ld com opções comuns e bibliotecas de suporte necessárias, não é necessário especificá-las na linha de comandos.. (Essas informações são lidas a partir do arquivo de configuração /etc/xlC.cfg ou /etc/vac.cfg .)
- Modo de vinculação
O comando ' ld pode vincular objetos e programas de 32 bits, bem como objetos e programas de 64 bits, mas os objetos de 32 e 64 bits podem não ser vinculados entre si. Para especificar o modo para vinculação, é possível usar a variável de ambiente OBJECT_MODE ou as opções -b32 ou -b64 .
- Arquivos Archive
Os arquivos de arquivo são objetos compostos, que contêm arquivos de importação e arquivos de objeto, incluindo objetos compartilhados. Se um archive contiver outro archive ou membro cujo tipo não seja reconhecido, o comando ld emitirá um aviso e ignorará o membro não reconhecido. Se um arquivo de objeto contido em um arquivo compactado tiver o bit '
F_LOADONLYdefinido no cabeçalho XCOFF, o comando ' ld ignorará o membro. Esse bit é usado para designar versões antigas de objetos compartilhados que permanecem no archive para permitir que os aplicativos existentes carreguem e executem. Novo link de aplicativos com a nova versão do objeto compartilhado, ou seja, outro membro do arquivo.- Objetos Compartilhados
Um objeto compartilhado, criado por outra chamada ao comando ' ld, é um arquivo de objeto com o bit '
F_SHROBJdefinido no cabeçalho XCOFF. Um objeto compartilhado define símbolos externos que são resolvidos no tempo de execução. Se você especificar a opção ' -bnso ou ' -bnoautoimp, o comando ' ld processará um objeto compartilhado como um arquivo de objeto comum e, se o arquivo for removido, o link falhará.Normalmente, um objeto compartilhado que é usado como entrada é listado apenas na seção do carregador do arquivo de saída se um símbolo no objeto compartilhado for referido. Entretanto, quando o vinculador de tempo de execução é usado, você pode querer que os objetos compartilhados sejam listados mesmo que não haja símbolos referenciados. Quando a opção -brtl é usada, todos os objetos compartilhados listados na linha de comandos que não são membros de archive são listados no arquivo de saída. O carregador do sistema carrega todos esses objetos compartilhados quando o programa é executado, e os símbolos exportados por esses objetos compartilhados podem ser usados pelo vinculador de tempo de execução. Os objetos compartilhados que são membros de arquivo não são carregados automaticamente a menos que o carregamento automático seja ativado por um arquivo de importação no arquivo. Para ativar o carregamento automático, consulte Formato de arquivo de importação e exportação (sinalizadores-bI: e -bE: ).
- Importar e Exportação de Arquivos
Os arquivos de importação são arquivos ASCII que identificam os símbolos externos para resolver no tempo de execução. Um arquivo de importação identifica o objeto compartilhado que define os símbolos importados. O carregador do sistema encontra e resolve aqueles símbolos no tempo de execução. Se a primeira linha de um arquivo de importação começar com #! (#, ponto de exclamação), será possível especificar o arquivo na linha de comandos como um InputFileordinário.. Caso contrário, deve-se usar a opção -bI ou -bimport para especificar o arquivo de importação
Arquivos de exportação são arquivos ASCII que identificam símbolos externos que são disponibilizados para outro arquivo de objeto executável a importar. O formato de arquivo de um arquivo de exportação é o mesmo que o formato de arquivo de um arquivo de importação.
- Bibliotecas
Bibliotecas são arquivos cujos nomes terminam em .aou possivelmente .so. Para designar uma biblioteca, é possível especificar um nome de caminho absoluto ou relativo ou usar o sinalizador -l (letra minúscula L) no formulário -l Nome.. O último formulário designa um arquivo libName.a ou, quando a opção rtl é usada, um arquivo libName.so a ser procurado em vários diretórios Esses diretórios de procura incluem quaisquer diretórios especificados por sinalizadores -L e os diretórios de biblioteca padrão /usr/lib e /lib.
Nota: se você especificar um objeto compartilhado ou um archive que contém um objeto compartilhado, com um nome de caminho absoluto ou relativo, em vez de com o sinalizador -l Nome , o nome do caminho será incluído na cadeia do ID do arquivo de importação na seção do carregador do arquivo de entrada.. É possível substituir esse comportamento com a opção -bnoipath- Processando
O comando ld processa todos os arquivos de entrada da mesma maneira, sejam eles archives ou não.. Ele inclui as tabelas de símbolos de todos os objetos, descartando apenas definições de símbolo que duplicam símbolos existentes. Ao contrário de algumas outras versões do comando ld , não é necessário ordenar archives, portanto, as referências precedem as definições Além disso, você não precisa listar um arquivo de arquivo mais de uma vez na linha de comando.
A ordem dos sinalizadores de comando ld não afeta como eles são processados, exceto os sinalizadores usados com arquivos de objeto de entrada, bibliotecas e arquivos de importação. Essas sinalizações são -L, -f, -l (letra minúscula L), -bkeepfilee -bI (letra maiúscula i). As bandeiras são processadas na seguinte ordem:
- A sinalização -L inclui um diretório na lista de diretórios de procura para localizar bibliotecas especificadas pela sinalização -l (letra minúscula L). Os diretórios são pesquisados na ordem especificada. Todos os sinalizadores -L são processados antes que quaisquer sinalizadores -l sejam processados
- O comando ld processa os parâmetros InputFile , os arquivos especificados pela sinalização -f e as bibliotecas especificadas pela sinalização -l (letra L minúscula) na ordem especificada.
- O comando ld processa arquivos de importação especificados pelo sinalizador -bI (letra i maiúscula) na ordem especificada após o processamento de todos os outros arquivos de objeto e bibliotecas. É possível especificar um arquivo de importação como um arquivo de entrada sem a sinalização -bI se for necessário processar o arquivo antes de processar alguns arquivos de objeto. Nesse caso, a primeira linha do arquivo de importação deve começar com os símbolos #! (#, ponto de exclamação) e o arquivo de importação é processado com outros arquivos de entrada, conforme descrito na etapa 2.
- A opção -bkeepfile nomeia um arquivo de entrada no qual o comando ld não executa a coleta de lixo Se o arquivo de entrada especificado também for especificado como um parâmetro InputFile ou listado em um arquivo especificado pelo sinalizador -f , a opção -bkeepfile não afetará a ordem na qual o arquivo é processado. Caso contrário, o arquivo é processado em ordem juntamente com outros arquivos de entrada, conforme descrito na etapa 2.
Um arquivo de saída que é produzido pelo comando ld tem permissão de execução configurada, a menos que você especifique a opção -r flag ou -bnox ou erros foram relatados durante a vinculação. Um arquivo de saída existente não é sobrescrito se algum erro grave ocorreu, ou se o arquivo de saída foi especificado como um arquivo de entrada e qualquer erro ocorreu.
- Diversos
O comando ld usa os símbolos predefinidos a seguir para fornecer locais de endereço especiais e pode ser declarado na sintaxe C como
extern char name[ ]Os nomes dos símbolos são:Item Descrição _textEspecifica a primeira localização do programa. _etextEspecifica o primeiro local após o programa. _dataEspecifica a primeira localização dos dados. _edataEspecifica o primeiro local após os dados inicializados _endouendEspecifica o primeiro local após todos os dados. A única maneira de usar esses símbolos é levar seus endereços. Se um arquivo de entrada redefinir qualquer um desses símbolos, poderá haver resultados imprevisíveis Um símbolo predefinido adicional, '
_ptrgl, é usado pelos compiladores para implementar chamadas usando ponteiros de função.- Coleta de lixo
Por padrão, o comando ld executa coleta de lixo, excluindo seções de controle (CSECTs) que não são referenciadas ao gerar o arquivo de saída.
Um CSECT é uma unidade indivisível de codificação ou de dados. Um CSECT referencia outro CSECT se ele contém uma entrada de realocação (RLD) referente a um símbolo contido no outro CSECT. Uma CSECT referenciada faz com que todos os CSECTs que ele faz referência também sejam referenciados. Além disso, um CSECT será referenciado se contiver símbolos exportados, símbolos especificados com o sinalizador -u ou o símbolo designado como o ponto de entrada com o sinalizador -e .
Se um símbolo não for referido, mas for necessário no arquivo de saída, será possível exportar o símbolo, especificar o símbolo com a sinalização -u ou suprimir a coleta de lixo. Para suprimir a coleta de lixo, use a opção -r flag ou -bnogc . Para suprimir a coleta de lixo para arquivos de objeto individuais, utilize a opção -bkeepfile ou a opção -bgcbypass Mesmo quando a coleta de lixo é suprimida, símbolos internos não referenciados são excluídos.
- Sinalizadores ignorados e não suportados
Para compatibilidade com outras versões do comando ld , alguns sinalizadores são reconhecidos, mas ignorados Essas sinalizações produzem uma mensagem que afirma que a bandeira e seu operando foram ignorados. Um sinalizador ignorado não faz o comando ld parar sem processamento adicional. As seguintes bandeiras são ignoradas:
-ANumber -bnostrcmpct -n -bfilelist -bstrcmpct -N -bfl -BNumber -Q -bforceimp -d -RNumber -bi -i -VNumber -binsert -j[Key:]Number -x -bnoforceimp -kKey:Path -YNumberNota: Quando a opção -bsvr4 está presente na linha de comando ld , as opções -R e -z são redefinidas.Sinaliza que o comando ld não suporta resultado em uma mensagem de erro. Após todos os sinalizadores não suportados serem diagnosticados, o comando ld para sem processamento adicional.
Sinalizações
O comando ld está em conformidade com as Diretrizes de Sintaxe do Utilitário XPG, exceto que o argumento — se aplica apenas ao próximo operando, não aos operandos restantes na linha de comandos Por exemplo, na linha de comandos se você digitar ld --
-s -v, o -s será tratado como um nome de arquivo e o -v será tratado como uma sinalização. Para tratar o -v como um nome de arquivo, digite ld -- -s -- -v
| Item | Descrição |
|---|---|
| -bOpção | Configura opções especiais de processamento. Esta bandeira pode ser repetida. Para obter mais informações sobre essas opções, consulte Opções (-bOptions). |
-d [y | n] |
Quando -dy é especificado, ld usa vinculação dinâmica; essa opção é equivalente à opção -b so . Quando -dn é especificado, ld usa vinculação estática; essa opção é equivalente à opção -b nso . O padrão é -dy.. Esta opção é válida apenas quando a opção -bsvr4 é especificada |
| -D Número | Configura o endereço inicial dos dados inicializados (a seção de dados) do arquivo de saída para Número. Se o número especificado for -1, a seção de dados começará imediatamente após a seção de texto. Por padrão, a seção de dados começa no local 0. Se ambos os sinalizadores -D e -bpD forem especificados, o último sinalizador terá precedência sobre ele. Nota: o carregador do sistema realoca a seção de dados no tempo de execução, portanto, o número especificado afeta os endereços listados nos mapas de endereço ou impressos por utilitários, como o comando dump ou nm .
|
| -e Rótulo | Configura o ponto de entrada do arquivo de saída executável para Label. O ponto de entrada padrão é __start (sublinhado duplo start). |
| -f FileID | Especifica um arquivo que contém uma lista de arquivos de entrada a serem processados FileID deve conter uma lista de nomes de arquivos de entrada.. Cada linha em FileID é tratada como se fosse listada separadamente na linha de comando ld . As linhas no arquivo podem conter caracteres padrão de shell * (asterisco), [ (colchete esquerdo), ] (colchete direito) e ? (ponto de interrogação), que são expandidos usando a sub-rotina glob e podem designar diversos arquivos de objeto. |
| -G | O -G produz um objeto compartilhado que é ativado para uso com o vinculador de tempo de execução.. A sinalização -G é equivalente a especificar as opções erok, rtl, nortllib, nosymbolic, noautoexpe M:SRE com a sinalização -b . As opções subsequentes podem substituir essas opções. |
| -H Número | Alinha as seções de texto, dados e carregadores do arquivo de saída para que cada seção comece em um deslocamento de arquivo que é um múltiplo de Número. Se o número especificado for 1, nenhum alinhamento ocorre. Se o número especificado for 0, a seção do carregador será alinhada em um limite de palavra e as seções de texto e de dados serão alinhadas em um limite para satisfazer o alinhamento de todos os CSECTs nas seções O
valor padrão é 0. Se o Número especificado fizer com que qualquer CSECTS seja desalinhado dentro do arquivo de saída, o comando ld emitirá um aviso e o arquivo executável de saída poderá não ser carregado ou executado |
| -K | Alinha as seções de cabeçalho, texto, dados e carregadores do arquivo de saída para que cada seção comece em um limite de página. Essa sinalização é equivalente a especificar -H Number, em que Number é o tamanho da página da máquina na qual o ld está em execução. |
| -l Nome | Processa o arquivo " libName.a. No modo dinâmico, com a opção ' rtl, processa o arquivo ' libName.a ou ' libName.so. Em todos os casos, os diretórios especificados pelo sinalizador -L ou nos diretórios da biblioteca padrão (/usr/lib e /lib) são procurados para localizar o arquivo. No modo dinâmico com a opção rtl , o primeiro diretório que contém libName.so ou libName.a satisfaz a procura Se ambos os arquivos forem localizados no mesmo diretório, o arquivo libName.so será utilizado Você pode repetir esta bandeira. Para obter mais informações sobre o modo dinâmico, consulte Vinculação de tempo de execução Nota: A primeira definição de um símbolo é mantida, mesmo se nenhuma referência ao símbolo for vista quando o archive for lido.. Em outras versões do comando ld , um símbolo definido em um archive será ignorado se nenhuma referência ao símbolo for vista quando o archive for lido.
|
| -L Diretório | Inclui Diretório na lista de diretórios de procura que são usados para localizar bibliotecas designadas pelo sinalizador -l (letra L minúscula). A lista de diretórios, incluindo os diretórios de biblioteca padrão, também é registrada na seção do carregador de arquivo de objeto de saída para uso pelo carregador do sistema, a menos que você use a opção -blibpath, -bnolibpathou -bsvr4 . Você pode repetir esta bandeira. |
| -m ou -M | Lista para a saída padrão os nomes de todos os arquivos e membros de archive que são processados para criar o arquivo de saída Os objetos compartilhados e os arquivos de importação não são listados. |
| -o Nome | Nomeia o arquivo de saída Nome. Por padrão, o nome do arquivo de saída é a.out |
| -r | Produz um arquivo de saída não executável para ser usado como um arquivo de entrada em outra chamada de comando ld Esse arquivo também pode conter símbolos não resolvidos A sinalização -r é equivalente a especificar as opções erok, noglink, noxe nogc com a sinalização -b . (Subsequentes opções podem substituir essas opções.) |
| -R Caminho | Válido apenas quando a opção -bsvr4 estiver presente no ld da linha de comandos Ele define uma lista separada por dois pontos de diretórios que são usados para especificar diretórios de procura de biblioteca para o vinculador de tempo de execução.. Caminho, se presente e não NULL, é registrado na seção de carregadores do arquivo de saída. Em seguida, ele é usado ao vincular um arquivo executável com bibliotecas compartilhadas no tempo de execução Várias instâncias desta opção são concatenadas juntamente com cada Caminho separados por um cólon. |
| -s | Tira a tabela de símbolos, informações de número de linha e informações de realocação ao criar o arquivo de saída. O stripping economica espaço mas prejudica a utilidade dos depuradores. Também é possível remover um arquivo executável existente usando o comando strip .. Nota: objetos não compartilhados não poderão ser vinculados se forem removidos. Um objeto compartilhado pode ser arrancado, mas um objeto compartilhado, compartilhado, não pode ser usado ao se ligar estaticamente.
|
| -S Número | Configura o tamanho máximo (em bytes) permitido para a pilha de usuários quando o arquivo de programa executável de saída é executado... Este valor é salvo no cabeçalho auxiliar e usado pelo carregador do sistema para configurar o soft ulimit. O
valor padrão é 0. Para obter mais informações sobre grandes pilhas de usuários e programas de 32 bits, consulte Suporte a Programas Grandes no tópico Conceitos Gerais de Programação |
| -T Número | Configura o endereço inicial da seção de texto do arquivo de saída para Número. O
valor padrão é 0. Se ambos os sinalizadores -T e -bpT forem especificados, o último sinalizador terá precedência sobre ele. Nota: o carregador do sistema realoca a seção de texto no tempo de execução, portanto, o número especificado afeta os endereços que são listados nos mapas de endereços ou impressos por utilitários como o nm ou o comando dump .
Atenção: Se Number for
0x1000xxxxxxx e o programa vinculado for um programa de 64 bits, o carregador do sistema carregará o texto executável na memória que inicia a partir do segmento no endereço 0x10000000000. |
| -u Nome | Essa opção evita a coleta de lixo do símbolo externo Nome Se o símbolo especificado não existir, é relatado um aviso. Você pode repetir esta bandeira. |
| -v | Grava informações adicionais sobre a execução do comando binder no arquivo loadmap . |
| -V | Grava a sequência de versões do comando ld no erro padrão (stderr). |
| -z | Na ausência da opção -b svr4 , a sinalização -z funciona da mesma forma que a sinalização -K . |
| -z defs | Essa opção força um erro fatal se algum símbolo indefinido permanecer no final do link. Essa opção é o padrão quando um arquivo executável é construído Também é útil ao construir uma biblioteca compartilhada para assegurar que o objeto é auto contido, ou seja, que todas as suas referências simbólicas sejam resolvidas internamente. Esta opção é válida apenas quando a opção -b svr4 é especificada Ele é equivalente à opção -b ernotok |
| -z nodefs | Esse sinalizador permite símbolos indefinidos Essa opção é a padrão quando uma biblioteca compartilhada é construída Quando usado com arquivos executáveis, o comportamento de referências a esses símbolos indefinidos é inespecificado. Esta opção é válida apenas quando a opção -b svr4 é especificada Ele é equivalente à opção -b erok |
| -z multidefs | Esta opção permite várias definições de símbolo Por padrão, várias definições de símbolos que ocorrem entre objetos realocáveis (arquivos.o ) resultam em uma condição de erro fatal. Esta opção suprime a condição de erro e permite que a primeira definição de símbolo seja tomada. Esta opção é válida apenas quando a opção -b svr4 é especificada |
| -z text | Somente no modo dinâmico, força um erro fatal se qualquer realocação para a seção ' .text permanecer. Esta opção é válida apenas quando a opção -b svr4 é especificada |
| -z nowarntext | Somente no modo dinâmico, permite realocações em todas as seções mapeáveis, incluindo a seção .text . Essa opção é o padrão ao construir uma Biblioteca Compartilhada Esta opção é válida apenas quando a opção -b svr4 é especificada |
| -z warntext | Somente no modo dinâmico, avisa se quaisquer realocações com relação à seção .text permanecerem Essa opção é o padrão ao construir um arquivo executável Esta opção é válida apenas quando a opção -b svr4 é especificada |
| -Z Sequências | Prefixa os nomes dos diretórios de biblioteca padrão com Sequências ao procurar bibliotecas especificadas pelo sinalizador -l (letra L minúscula) Por exemplo, com as sinalizações -Z test e -lxyz , o comando ld procura os arquivos /test/usr/lib/libxyz.a e /test/lib/libxyz.a . Quando o sinalizador -Z String é usado, os diretórios de bibliotecas padrão não são procurados Esse sinalizador não tem efeito nas informações de caminho da biblioteca que são salvas na seção do carregador do arquivo de saída. Esta sinalização é útil ao desenvolver uma nova versão de uma biblioteca. Você pode repetir esta bandeira. |
O Binder
O comando ld verifica os argumentos da linha de comandos e chama o componente de ligação (por padrão, o arquivo /usr/ccs/bin/bind ), passando uma lista gerada de subcomandos do componente de ligação. O programa de ligação vincula os arquivos. Embora o binder seja chamado pelo comando ld , é possível iniciar o binder diretamente. Neste caso, o binder lê comandos da entrada padrão.
Duas opções afetam a chamada do fichador. A opção binder especifica qual ligação chamar e a opção nobind impede que o comando ld chame um componente de ligação. Outras opções de fichadores afetam os subcomandos de binder que são gerados.
Se o comando ld não detectar erros nas opções ou argumentos de linha de comandos, ele chamará o binder. O binder é chamado com uma linha de comando do formulário:
bind [quiet_opt] [loadmap_opt]
O valor padrão para quiet_opt é quiet e o valor padrão para loadmap_opt é a cadeia nula, portanto, a linha de comandos padrão é:
/usr/ccs/bin/bind quiet
Opções-bOptions)
- Na lista a seguir de opções do componente de ligação, dois nomes de opções separados pela palavra ou são sinônimos.
- O FileID indica um nome de caminho. Você pode usar um nome de caminho relativo ou completo.
- Para uma opção não repetida seguida por um argumento, é possível negar a opção usando um argumento nulo. Ou seja, especifique apenas a opção e o cólon.
- Se você especificar opções conflitantes, a última tem precedência.
| Item | Descrição |
|---|---|
| 32 | Especifica o modo de vinculação 32-bit. Neste modo, todos os arquivos de objetos de entrada devem ser arquivos XCOFF32 , ou um erro é relatado. Os membros do arquivo XCOFF64 são ignorados. Para importar ou exportar arquivos que especificam o modo de determinados símbolos, os símbolos de 64 bits são ignorados. Se ambas as opções -b32 e -b64 forem especificadas, a última opção especificada será usada Se nenhuma das opções for especificada, o modo será determinado a partir do valor da variável de ambiente OBJECT_MODE. |
| 64 | Especifica o modo de vinculação 64-bit. Nesse modo, todos os arquivos de objeto de entrada devem ser arquivos XCOFF64 , ou um erro será relatado Os membros do arquivo XCOFF32 são ignorados. Para arquivos de importação ou exportação que especificam o modo de determinados símbolos, símbolos de 32 bits são ignorados. Se ambas as opções -b32 e -b64 forem especificadas, a última opção especificada será usada Se nenhuma opção for especificada, o modo será determinado a partir do valor da variável de ambiente OBJECT_MODE. |
| asis | Processa todos os símbolos externos em caso misto. Essa opção é o padrão Para processar todos os símbolos externos em maiúsculas, consulte a opção caps a seguir. |
| aslr ou aslr:[tdsmp] * ou aslr:- | Especifica a randomização de layout do espaço de endereço para o programa. A opção aslr ativa todos os atributos de aleatorização quando apenas essa opção é usada, e Se a opção aslr for seguida por dois pontos, atributos individuais poderão ser ativados. Os atributos a seguir denotam texto, dados, pilha, mmap e bibliotecas privadas: t, d, s, me p. Para os atributos que não são listados, as configurações de randomização permanecem desativadas.
Nota: Os atributos m e p não podem ser especificados para programas de 32-bit bits.
Alguns programas são compilados e vinculados tais que endereços realocáveis são mapeados na seção de texto. Esta opção requer a realocação dos endereços quando o programa é executado Esses programas falham se a randomização for ativada para texto ou dados. Como resultado, quando existirem realocações de seção de texto, a randomização de texto e dados não será ativada, a menos que os atributos t e d sejam explicitamente especificados ao usar a opção aslr . |
| autoexp | Exporta automaticamente alguns símbolos do módulo de saída sem ter que listá-los em um arquivo de exportação. (Esta opção não exporta todos os símbolos do módulo de saída. Utilize a opção bexpall para exportar todos os símbolos.) Esta opção é o padrão. Use esta opção ao vincular um programa principal. O vinculador assume que você está vinculando um programa principal quando você não especifica um tipo de módulo (com a opção M ou modtype ) começando com S e você não usa a opção noentry .Ao usar a opção autoexp , se qualquer objeto compartilhado listado na linha de comandos importar um símbolo do arquivo especial . (ponto) e o módulo que está vinculado contiver uma definição local do símbolo, o símbolo será exportado automaticamente. Outros símbolos também são exportados automaticamente quando você vincula à opção rtl . Se um símbolo definido no módulo que está vinculado tiver uma ou mais definições exportadas de um objeto compartilhado que estão listadas na linha de comandos e se qualquer uma das definições for um símbolo BSS, o símbolo será exportado automaticamente. Se a definição no módulo vinculado for um símbolo BSS, o símbolo será exportado com o atributo nosymbolic . Caso contrário, o símbolo será exportada com o atributo symbolic Se o símbolo for listado em um arquivo de exportação com outro atributo de exportação, o atributo explícito será usado. Se a opção " autoexp exportar automaticamente um símbolo, mas o símbolo estiver listado em um arquivo de exportação com o atributo " list, o símbolo não será exportado. |
| autoimp ou so | Importa símbolos de quaisquer objetos compartilhados especificados como arquivos de entrada. Os objetos compartilhados são referenciados mas não incluídos como parte do arquivo objeto de saída. Essa opção é o padrão |
| autoload: caminho / arquivo (membro) | Carregue automaticamente o membro do archive |
| bigtls | Gera código extra se o tamanho do armazenamento de thread-local no objeto de saída ou programa é maior que 64 KB e um compilador foi usado que gera referências diretas para variáveis locais-exec ou locais-dinâmicas locais. Código extra é necessário para cada referência direta a uma variável thread-local que não pode ser endereçada com um deslocamento de 16-bit. Como um programa que contém código extra pode ter desempenho ruim, é melhor reduzir o número de variáveis de encadeamento local que usam referências diretas do que usar a opção. A opção padrão é nobigtls . |
| bigtoc | Gera código extra se o tamanho do índice (TOC) for maior do que 64 KB. Código extra é necessário para cada referência a um símbolo TOC que não pode ser endereçado com um deslocamento de 16-bit. Como um programa que contém código gerado pode ter desempenho insatisfatório, reduza o número de entradas de TOC que são necessárias pelo programa antes de usar esta opção O padrão é a opção nobigtoc .. |
| bindcmds:FileID | Grava uma cópia dos comandos de ligação que são gerados pelo comando ld para FileID. É possível redirecionar o arquivo resultante como entrada padrão para o programa de ligação quando o programa de ligação é chamado como um programa independente. Por padrão, nenhum arquivo é produzido. |
| binder:FileID | Usa FileID como o binder chamado pelo comando ld . O componente de ligação padrão é o arquivo /usr/ccs/bin/bind |
| bindopts:FileID | Grava uma cópia dos argumentos do programa binder em FileID. É possível usar o arquivo resultante para iniciar o programa de ligação como um programa independente. Por padrão, nenhum arquivo é produzido. |
| C:FileID ou ' calls:FileID | Grava um mapa de endereço do arquivo de objetos de saída para FileID. Os símbolos são classificados por seção e, em seguida, por endereço. Para cada símbolo listado no mapa, são listadas referências do símbolo a outros símbolos. Por padrão, nenhum arquivo é produzido. Para saber mais sobre a opção calls , consulte Mapas de Endereço. |
| caps | Processa todos os símbolos externos em maiússada. O padrão é a opção asis .. |
| cdtors[: [incl] [: [nnn] [:order]]] | O linker reúne informações sobre construtora estática C++ ou funções de destruidor e salva essas informações no arquivo de saída. A subopção incl diz ao linker que arquivam membros para pesquisar ao criar as informações salvas. A seguir estão os valores possíveis::
A subopção nnn especifica a prioridade do módulo de saída. Se um programa carregar vários módulos ao mesmo tempo, a subopção nnn será usada para controlar a ordem na qual os módulos são inicializados... (A prioridade é ignorada se o arquivo de saída for um programa e não um objeto compartilhado.) A prioridade pode estar no intervalo de -231 a231-1. A prioridade padrão é 0. Os valores no intervalo de -231 a -231+1023 são reservados para a inicialização em tempo de execução do C++. A subopção order especifica a ordem em que as funções construtoras ou destrutoras individuais são chamadas, para todas as funções com a mesma prioridade. A seguir estão os valores possíveis::
Você pode especificar esta opção várias vezes, mas a última subopção que você especificar é usada. Uma subopção não especificada não afeta o valor atual ou padrão. Por exemplo, -bcdtors:csect:20:s -bcdtors:::r é igual a -bcdtors:csect::20:r. O padrão é -bnocdtors.. Se -bcdtors for especificado, será igual a -bcdtors:all:0:s. Observação:
|
| comprld ou crld | Combina várias entradas de realocação (RLDs) no mesmo endereço em um único RLD quando possível. Essa opção é o padrão |
| cror15 | Usa a instrução cror 15,15,15 (0x4def7b82) como a instrução no-op especial que segue uma instrução de chamada O valor padrão é ori 0, 0,
0 (0x60000000). Consulte a opção nop ..Use essa opção ao vincular arquivos de objeto no nível atual do sistema que você pretende revincular no AIX® 3.1. |
| cror31 | Usa a instrução cror 31,31,31 (0x4ffffb82) como a instrução no-op especial que segue uma instrução de chamada O valor padrão é ori 0, 0,
0 (0x60000000). Consulte a opção nop ..Use esta opção ao vincular os arquivos de objeto no nível atual do sistema que você pretende vincular novamente no AIX 3.2 |
| D: Número [/dsa] ou maxdata:Número[/dsa] | Configura o tamanho máximo (em bytes) que é permitido para a área de dados do usuário (ou heap do usuário) quando o programa executável é executado. Esse valor é salvo no cabeçalho auxiliar e usado pelo carregador do sistema para aumentar o limite de dados recuperáveis, se necessário. O
valor padrão é 0. Quando esta opção é usada, o número especificado de bytes é reservado para a área de dados do usuário. O programa pode não mapear explicitamente objetos, usando funções shmat ou mmap para endereços virtuais que são reservados para a área de dados do usuário. Para programas de 32 bits, o valor máximo que é permitido pelo sistema é Para programas de 64 bits, a opção maxdata fornece um tamanho máximo garantido para o heap de dados de programas Qualquer valor pode ser especificado, mas a área de dados não pode se estender após |
| datapsize:psize | Solicita tamanhos de página de psize em bytes para dados O valor pode ser especificado como um número decimal, hexadecimal ou octal. As especificações de número são as mesmas que na linguagem de programação C. Além disso, o tamanho da página pode ser especificado como um número seguido por um sufixo de um caractere:
-b datapsize:16k ou -b datapsize:0x4000 solicite 0x4000 para dados e configure o bit F_VARPG no cabeçalho XCOFF |
| dbg:Opção ou debugopt:Opção | Configura uma opção especial de depuração ou controle. Por padrão, nenhuma opção de depuração está definida. A opção dbg:loadabs ou debugopt:loadabs é utilizada para indicar que o programa de saída é carregado no mesmo endereço que o endereço especificado pelos sinalizadores -T e -D Nesse caso, um ramo-instrução absoluta nunca é alterada para uma instrução de filial (relativa) mesmo que seu alvo seja um símbolo realocável. Da mesma forma, uma instrução de ramo nunca é alterada para um ramo-instrução absoluta. |
| delcsect | Exclui todos os símbolos em um CSECT se algum símbolo no CSECT foi definido por um arquivo objeto lido anteriormente. Esta opção previne mais de uma instância da mesma função a partir de existem no mesmo programa. Por exemplo, se o arquivo ' a.o define a função ' a() e o arquivo ' b.o define as funções ' a() e ' b(), a vinculação de ' a.o e ' b.o com a opção ' -bdelcsect exclui os símbolos ' a() e ' b() de ' b.o. Assim, duas instâncias de a() não existem.. O padrão é a opção nodelcsect .. |
| dynamic ou shared | Faça com que o linker processe objetos compartilhados subsequentes no modo dinâmico. Essa opção é o padrão No modo dinâmico, os objetos compartilhados não são incluídos estaticamente no arquivo de saída. Em vez disso, os objetos compartilhados são listados na seção do carregador do arquivo de saída. Quando você especifica a opção rtl e o modo dinâmico está em vigor, os arquivos que terminam em .so , bem como .a satisfazem procuras para bibliotecas especificadas com o sinalizador -l (L minúsculo). Quando ambos estão em vigor, a preferência é dada a .so em vez de .a quando presente no mesmo diretório Ao especificar a opção rtl e o modo estático estiver em vigor, os arquivos que terminam em .a serão processados. |
| E:FileID ou ' export:FileID | Exporta os símbolos externos listados no arquivo FileID. Os símbolos exportados estão listados na seção do carregador do arquivo de saída. Não há arquivo de exportação padrão. Quando a opção " svr4 é usada, a opção " E:FileID cancela qualquer opção " expall ou " expfull. |
| ernotok ou f | Reporta um erro se houver alguma referência externa não resolvida. Essa opção é o padrão |
| erok | Produz o arquivo objeto de saída sem erros mesmo que haja referências externas não resolvidas. O padrão é a opção ernotok .. |
| errmsg | Grava mensagens de erro no erro padrão se o nível de erro da mensagem for maior ou igual ao valor da opção halt e a opção quiet for usada ou a saída padrão for redirecionada. Essa opção é o padrão |
| ex1:FileID, ' ex2:FileID, ' ex3:FileID, ' ex4:FileID e ' ex5:FileID | Forneça saídas de usuário na sequência de subcomandos típicos do binder. Cada arquivo especificado por FileID deve conter uma lista de subcomandos do componente de ligação que são executados da seguinte forma:
|
| expall | Esta opção exporta todos os símbolos globais, exceto símbolos importados, símbolos não referenciados que são definidos em membros de archive e símbolos que começam com um sublinhado (_).. É possível exportar mais símbolos listando-os em um arquivo de exportação ou usando a opção expfull .. Essa opção não afeta os símbolos exportados pela opção autoexp . Ao usar essa opção, talvez seja possível evitar isso usando um arquivo de exportação. No entanto, usando um arquivo de exportação fornece controle explícito sobre quais símbolos são exportados e permite o uso de outros símbolos globais dentro do objeto compartilhado sem se preocupar com o conflito com nomes que são exportados de outros objetos compartilhados. O padrão é noexpall.. |
| expfull | Essa opção exporta todos os símbolos globais, exceto os símbolos importados e os símbolos definidos nos membros do arquivo. Diferente da opção -bexpall , a opção -bexpfull exporta símbolos que começam com um sublinhado (_) e também exporta o ponto de entrada do módulo do símbolo. O comportamento real da opção -bexpfull pode ser diferente, dependendo do caso de uso específico e da configuração do vinculador de tempo de execução A opção -bexpfull não afeta símbolos que são exportados pela opção autoexp . O valor padrão é noexpfull a menos que a opção svr4 seja usada com a sinalização -b . |
| export:FileID | Funciona da mesma forma que a opção E:FileID . |
| f | Funciona da mesma forma que a opção ernotok |
| forceimprw | Força CSECTs somente leitura que contêm referências a símbolos importados a se tornarem de leitura ou gravação O padrão é noforceimprw |
| forkpolicy:política | Configura as bandeiras _AOUT_FORK_POLICY e _AOUT_FORK_COR no cabeçalho auxiliar do XCOFF, ao vincular um programa de 64-bit. Se policy for cor, o sinalizador _AOUT_FORK_COR também será configurado, solicitando o uso da política forktree de cópia na referência quando o programa for executado. Se policy for cow, o sinalizador _AOUT_FORK_COR será reconfigurado, solicitando o uso da política forktree de cópia na gravação quando o programa for executado. Ao vincular um programa de 32-bit minutos, essa bandeira é ignorada. O valor padrão é noforkpolicy. |
| gc | Executa coleta de lixo. Use a opção nogc, gcbypassou keepfile para evitar a coleta de lixo para alguns ou todos os arquivos de objeto Essa opção é o padrão |
| gcbypass:Número | Especifica o número de arquivos a ignorar quando o lixo for coletado se a opção gc for especificada. Essa opção será ignorada se a opção nogc for usada Se Número for 0, essa opção será equivalente à opção gc e a coleta de lixo será executada para todos os arquivos. O valor padrão é 0. |
| glink:FileID | Usa o código do protótipo de vinculação global especificado por FileID. O código de interface de vinculação global é gerado para cada função importada ou indefinida. No modo de 32 bits, o padrão é o arquivo ' /usr/lib/glink.o. No modo de 64 bits, o padrão é o arquivo ' /usr/lib/glink64.o. |
| h:Número ou halt:Número | Especifica o nível de erro máximo para o processamento do comando do binder continuar. O valor padrão é 4. Se qualquer subcomando de binder tiver um valor de retorno maior que Número, nenhum subcomando de binder adicional será processado. Se o valor do nível de parada for 8 ou maior, o arquivo de saída poderá não ser um arquivo executável se ele for produzido. Os valores de retorno
são:
|
| I:FileID ou import:FileID | (Maiúscula i) Importa os símbolos listados em FileID. Não há arquivo de importação padrão. |
| initfini:[ Inicial] [:Finalização] [:Prioridade] | Especifica uma função de inicialização e terminação de módulo para um módulo, em que Initial é uma rotina de inicialização, Termination é uma rotina de terminação e Priority é um número inteiro assinado, com valores de -2.147.483.648 a 2.147.483.647. Especifique pelo menos um de Initial e Terminatione, se você omitir Termination e Priority, deverá omitir os dois pontos após Initial também. Se você não especificar Prioridade, 0 será o padrão. Esta opção pode ser repetida. Esta opção classificam as rotinas por prioridade, iniciando com a rotina com a menor (mais negativa) prioridade. Ele invoca rotinas de inicialização em ordem, e rotinas de finalização em ordem inversa. Essa opção chama rotinas com a mesma prioridade em uma ordem não especificada, mas se várias opções initfini especificarem a mesma prioridade e uma rotina de inicialização e finalização, ela preservará a ordem relativa das rotinas. Por exemplo, se você especificar as opções ' initfini:i1:f1 e ' initfini:i2:f2, as funções ' i1 e ' i2 serão invocadas em uma ordem não especificada, mas se ' i1 for invocado antes de ' i2 quando o módulo for carregado, ' f2 será invocado antes de ' f1 quando o módulo for descarregado. Observação:
|
| ipath | Para objetos compartilhados listados na linha de comandos, em vez de especificados com a sinalização -l , use o componente de caminho ao listar o objeto compartilhado na seção do carregador do arquivo de saída. Essa opção é o padrão |
| keepfile:FileID | Essa opção evita a coleta de lixo de FileID. Por padrão, o binder exclui o CSECTS não referenciado em todos os arquivos. Você pode repetir esta opção. |
| lazy | Esta opção permite o carregamento lento de módulos dependentes de um módulo Essa opção inclui uma opção -lrtl que segue outros sinalizadores e opções. Se a opção -brtl for especificada, a opção -blazy será ignoradas e o carregamento lento não será ativado Quando um módulo é vinculado, uma lista de seus módulos dependentes é salva na seção de carregadores do módulo. O carregador do sistema carrega automaticamente os módulos dependentes depois que o módulo é carregado. Quando o carregamento preguiçoso é ativado, o carregamento é adiado para alguns dependentes até que uma função seja chamada no módulo pela primeira vez. Um módulo é preguiçoso carregado quando todas as referências para o módulo são chamadas de função. Se variáveis no módulo forem referenciadas, o módulo será carregado da maneira típica. Nota: Tenha cuidado ao comparar ponteiros de função se você estiver usando o carregamento lento Geralmente uma função tem um endereço exclusivo para comparar dois ponteiros de função para determinar se eles se referem à mesma função. Ao usar o carregamento lento para vincular um módulo, o endereço de uma função em um módulo carregado lento não é o mesmo endereço calculado por outros módulos. Programas que dependem da comparação de ponteiros de função não devem usar carregamento lento.
Para obter mais informações sobre carregamento lento, consulte Bibliotecas Compartilhadas e Carregamento Lento. |
| l:FileID ou loadmap:FileID | (Lowercase L) Grava cada subcomando do binder e seus resultados em FileID. Por padrão, nenhum arquivo é produzido. |
| libpath:Caminho | Usa Caminho como o caminho da biblioteca ao escrever a seção do carregador do arquivo de saída. O caminho não é verificado quanto à validade nem usado na pesquisa de bibliotecas especificadas pelo sinalizador ' -l. Caminho substitui quaisquer caminhos de biblioteca que são gerados quando o sinalizador -L é usado Se você não especificar nenhuma sinalização -L ou se você especificar a opção nolibpath , as informações do caminho da biblioteca padrão serão gravadas na seção do carregador do arquivo de saída. As informações de caminho da biblioteca padrão serão o valor da variável de ambiente LIBPATH se estiver definida e /usr/lib:/lib, caso contrário. |
| loadmap:FileID | Funciona da mesma forma que a opção l:FileID . |
| lpdata | Configura o bit F_LPDATA no cabeçalho XCOFF do arquivo executável.. Quando este bit for configurado, o processo vai solicitar grandes páginas para seus dados. |
| Item | Descrição |
|---|---|
| M:ModuleType ou modtype:ModuleType | Configura o campo do tipo módulo de dois caracteres e a sinalização de objeto compartilhado no arquivo objeto. O tipo de módulo não é verificado pelo binder, mas ele deve ser configurado para um dos seguintes valores:
|
| map:FileID ou R:FileID | Grava um mapa de endereços do arquivo de objeto de saída no FileID. . Os símbolos são classificados por seção e, em seguida, por endereço. Por padrão, nenhum arquivo é produzido. Para saber mais sobre a opção map , consulte Mapas de Endereço. |
| maxdata:Número[/dsa] | Funciona igual à opção D:Number[/dsa]. |
| maxstack:Número ou S:Número | Funciona da mesma forma que o sinalizador -S |
| modtype:ModuleType | Funciona igual à opção M:ModuleType . |
| nl ou noloadmap | Essa opção não grava os subcomandos de ligação e seus resultados em um arquivo de mapeamento de carregamento. Essa opção é o padrão |
| noaslr | Cancela o efeito de uma opção anterior do aslr na linha de comandos |
| noautoexp | Previne a exportação automática de quaisquer símbolos. O padrão é a opção autoexp .. |
| noautoimp ou nso | Vincula quaisquer objetos inundados, compartilhados como arquivos de objetos ordinários. Quando você usa essa opção, a seção de carregador de objetos compartilhados não é usada. O padrão é a opção autoimp ou so Nota: usando qualquer uma dessas sinalizações, é possível vincular estaticamente um arquivo de objeto compartilhado em um aplicativo. Qualquer aplicativo estaticamente vinculado não é móvel binário de qualquer nível de correção ou liberação para qualquer outro nível de correção ou liberação.
|
| nobigtls | Essa opção gera uma mensagem de erro grave se o compilador gerar referências diretas a variáveis thread-local e a realocação para um dos estouros de variáveis porque o tamanho do armazenamento thread-local é maior que 64 KB. Se um arquivo de saída for produzido, ele não será executado corretamente A opção nobigtls é a opção padrão |
| nobigtoc | Essa opção gera uma mensagem de erro grave se o tamanho do TOC for maior que 64 KB. Se um arquivo de saída for produzido, ele não será executado corretamente Essa opção é o padrão |
| nobind | Omitas chamando o fichador. Em vez disso, o comando ld grava a lista gerada de subcomandos do conector na saída padrão. Por padrão, o comando ld chama o conector. |
| nocdtors | Esta opção não reúne funções de construtor estático ou destruidor Essa opção é o padrão |
| nocomprld ou nocrld | Essa opção não combina várias entradas de realocação (RLDs) no mesmo endereço em um único RLD. O padrão é a opção comprld ou crld |
| nodelcsect | Esta opção permite que todos os símbolos no CSECT sejam considerados durante a resolução do símbolo, mesmo se algum símbolo no CSECT for definido em um arquivo de objetos lido anteriormente Para obter mais informações, consulte a opção delcsect A opção nodelcsect é o padrão.. |
| noexpall | Essa opção não exporta símbolos a menos que você os liste em um arquivo de exportação ou os exporte com a opção autoexp . Essa opção é o padrão |
| noexpfull | Essa opção não exporta símbolos a menos que você os liste em um arquivo de exportação ou os exporte com a opção autoexp . Essa opção é o padrão, a menos que a opção svr4 seja usada |
| noentry | Esta opção indica que o arquivo de saída não possui nenhum ponto de entrada Para reter quaisquer símbolos necessários, especifique-os com o sinalizador -u ou com um arquivo de exportação Também é possível usar a sinalização -r ou as opções nogc ou gcbtpass para manter todos os símbolos externos em alguns ou todos os arquivos de objeto. Se nem a opção noentry nem a opção nox for usada e o ponto de entrada não for localizado, será emitido um aviso. Esse aviso é suprimido quando a opção svr4 é usada |
| noerrmsg | Essa opção não grava mensagens de erro para o erro padrão Use esta opção se você especificar a opção noquiet e canalizar saída padrão para um comando como tee ou pg. |
| noforceimprw | Essa opção permite que CSECTs somente leitura façam referência a símbolos importados Essa opção é o padrão |
| noforkpolicy | Limpa as bandeiras _AOUT_FORK_POLICY e _AOUT_FORK_COR no cabeçalho auxiliar do XCOFF, ao vincular um programa de 64-bit. A política de forktree padrão é usada, a menos que uma política de forktree seja especificada com a variável de ambiente VMM_CNTRL. Ao vincular um programa de 32-bit minutos, essa bandeira é ignorada. Essa opção é o padrão |
| nogc | Essa opção evita a coleta de lixo CSECTs em todos os arquivos de objetos que contêm símbolos globais são mantidos, sejam eles referenciados ou não. O padrão é a opção gc .. |
| noglink | Evita que o comando ld insira o código de ligação global Por padrão, o binder insere o código de vinculação global. |
| noipath | Para objetos compartilhados listados na linha de comandos, em vez de especificados com a sinalização -l , use um componente de caminho nulo ao listar o objeto compartilhado na seção do carregador do arquivo de saída. Um componente de caminho nulo é sempre usado para objetos compartilhados especificados com o sinalizador -l . Essa opção não afeta a especificação de um componente de caminho usando uma linha que começa com #! em um arquivo de importação O padrão é a opção ipath .. |
| nolibpath | Substitui qualquer caminho de biblioteca anterior que seja gerado pelo sinalizador -L ou especificado pela opção libpath Em vez disso, as informações do caminho da biblioteca padrão são escritas na seção do carregador do arquivo de saída. As informações do caminho da biblioteca padrão serão o valor da variável de ambiente LIBPATH se ela estiver definida e /usr/lib:/lib caso contrário. |
| noloadmap | Funciona da mesma forma que a opção nl |
| nolpdata | Limpa o bit F_LPDATA no cabeçalho XCOFF do arquivo executável.. Quando este bit não for configurado, o processo vai utilizar pequenas páginas (regulares) para seus dados. |
| nom | Esta opção não lista os arquivos de objeto utilizados para criar o arquivo de saída. Essa opção substitui o sinalizador -m Essa opção é o padrão |
| noobjreorder | Essa opção não usa a lógica de reordenação CSECT de profundidade. Os CSECTs no arquivo de saída estão dispostos na mesma ordem em que os arquivos de objetos e arquivos da biblioteca foram especificados na linha de comando, exceto os seguintes:
Se as opções noobjreorder e noreorder forem especificadas, a opção noreorder terá prioridade. O padrão é a opção reorder .. |
| noorder_file | Esta opção não mapeia símbolos em uma ordem especificada.. Essa sinalização nega o efeito de uma sinalização -border_file anterior. Essa opção é o padrão |
| nop:Nop | Especifica a instrução no-op usada após ramificações para rotinas locais. Nop pode ser um dos valores especiais cror15, cror31, ori, ou um número hexadecimal de oito dígitos. A instrução ori é o padrão. Especificar a opção -bnop:cror15 é equivalente a especificar a opção -bcror15 ; especificar a opção -bnop:cror31 é equivalente a especificar a opção -bcror31 . Se você especificar uma das opções nop especiais, todas as opções nop anteriores serão substituídas. Se Nop for um número hexadecimal de oito dígitos, ele especifica uma instrução de máquina arbitrária. Esta instrução de máquina substitui qualquer valor especial especificado anteriormente para a instrução Nop . Quando você usa este formulário, você pode repetir esta opção. A última instrução de máquina que é especificada é a instrução que é gerada pelo componente de ligação após ramificações intra-módulo. Outras instruções de máquina especificadas são reconhecidas como instruções sem op, mas são convertidas para a instrução de não-op preferida. |
| noquiet | Grava cada subcomando de binder e seus resultados para a saída padrão. O padrão é a opção quiet .. |
| noreorder | Esta opção não reordene CSECTs, exceto para combinar todos XMC_TC (constante de endereço TOC) e XMC_TD (variável TOC) CSECTs e colocá-los na seção de dados e combinar todos os símbolos BSS e colocá-los na seção bss. Todos os outros CSECTs são colocados na seção de texto, portanto, texto e dados são misturados no arquivo de saída. Quando a opção noreorder é usada, a seção de texto do arquivo de saída pode não ser mais independente de posição e o carregador do sistema não carregará um módulo se a seção de texto não for independente de posição Portanto, evite usar essa opção para programas e extensões kernel. Se as opções noobjreorder e noreorder forem especificadas, a opção noreorder terá precedência. O padrão é a opção reorder .. |
| nortl | Desativa a vinculação de tempo de execução para o arquivo de saída Essa opção implica as opções nortllib e nosymbolic- Além disso, mais ações descritas na opção rtl não são executadas. Essa opção é o padrão, a menos que a opção svr4 seja usada |
| nortllib | Essa opção não inclui uma referência ao vinculador de tempo de execução.. Se um programa principal estiver vinculado a essa opção, não ocorrerá nenhuma vinculação de tempo de execução no programa, independentemente da maneira como quaisquer módulos compartilhados são vinculados que são usados pelo programa Essa opção é o padrão, a menos que a opção svr4 seja usada |
| norwexec | Especifica que se a configuração sed_config do sistema não estiver desativada, as áreas de dados privados do processo terão permissão de não execução. |
| noshrsymtab | Evita que a sinalização _AOUT_SHR_SYMTAB esteja configurada no objeto de saída. Essa opção é o estado padrão.. |
| nostabsplit | Evita que a seção de depuração seja gravada em um arquivo de saída alternativo com a extensão .stab Essa opção é a configuração padrão. |
| nostrip | Esta opção não gera um arquivo de saída removido. Assim, a tabela de símbolos e informações de relocação são gravadas no arquivo de saída. Essa opção substitui o sinalizador -s Essa opção é o padrão |
| nosymbolic | Designa o atributo nosymbolic para a maioria dos símbolos exportados sem um atributo explícito Para obter mais informações, consulte Atributos de símbolos exportados. O padrão é a opção nosymbolic- .. |
| nosymbolic- | Designa o atributo nosymbolic- para a maioria dos símbolos exportados sem um atributo explícito Para obter mais informações, consulte Atributos de símbolos exportados. Essa opção é o padrão |
| notextro ou nro | Essa opção não verifica para assegurar que não haja entradas de realocação de tempo de carregamento para a seção de texto do arquivo de objeto de saída Essa opção é o padrão |
| notmprelname | O fichador não verifica as instanciações gerais. Nota: Esta opção só é necessária para o modo 32-bit bits. Essa opção é ignorada ao construir objetos de 64 bits.
|
| notypchk | Essa opção não verifica tipos de parâmetros de função entre chamadas funcionais externas. O padrão é a opção typchk .. |
| nov | Esta opção não grava informações adicionais para o arquivo de mapeamento de carga Essa opção é o padrão e substitui o sinalizador -v |
| noweaklocal | Resolve símbolos fracos usando ordem de procura normal. Essa opção substitui a opção weaklocal . É a opção padrão. |
| nox | Essa opção não torna o arquivo de saída um arquivo executável Nem o cabeçalho auxiliar nem a seção do carregador são escritos. Sinalizadores e opções que especificam valores que são gravados na seção do cabeçalho auxiliar ou do carregador não têm efeito quando essa opção é usada. O padrão é a opção x .. |
| nro | Funciona da mesma forma que a opção notextro |
| nso | Funciona da mesma forma que a opção noautoimp |
| order_file:FileID | Mapeia os símbolos listados em FileID na ordem especificada. Os símbolos que estão listados no arquivo são mapeados antes de outros símbolos da mesma classe de mapeamento de armazenamento. Nomes de função que são especificados no arquivo devem iniciar com um ponto porque um nome de função sem um ponto denota um descritor de função. |
| order:Especificação | Controla a ordem em que alguns símbolos são mapeados no arquivo de saída. As especificações são as seguintes:
|
| pD:Origem | Especifica Origem como o endereço do primeiro byte da página do arquivo que contém o início da seção de dados.. Por exemplo, se a seção de dados começar em um deslocamento 0x22A0 no arquivo de objeto, e pD:0x20000000 for especificado, o primeiro byte da seção de dados será designado ao endereço 0x200002A0 Essa opção assume um tamanho de página de 4096 (0x1000) bytes.Nota: Se ambos os sinalizadores -bpD e -D forem especificados, o último sinalizador terá precedência.
|
Se desejar cancelar um caminho de plug-in especificado anteriormente, não especifique a variável path que seja -bplugin:. Se um arquivo de entrada é um arquivo bitcode ou um arquivo que contém um arquivo bitcode, e um caminho de plug-in não é especificado, o comando ld falha. |
|
plugin_opt várias vezes. Normalmente, essa opção é gerada por um compilador. |
|
| pT:Origem | Especifica Origem como o endereço do primeiro byte da página do arquivo que contém o início da seção de texto.. Por exemplo, se a seção de texto começar em um deslocamento 0x264 no arquivo de objeto, e pT:0x10000000 for especificado, o primeiro byte da seção de texto será designado ao endereço 0x10000264Nota: Se ambos os sinalizadores -bpT e -T forem especificados, o último sinalizador terá precedência. Para obter mais informações, consulte a sinalização -T para obter informações adicionais.
|
| quiet | Essa opção não grava subcomandos de ligação e seus resultados na saída padrão. Essa opção é o padrão |
| Item | Descrição |
|---|---|
| R:FileID | Funciona da mesma forma que a opção map:FileID . |
| r ou reorder | Reordena os CSECTs como parte do processamento do comando save O processo de reordenação arranja CSECTs da mesma classe de mapeamento de armazenamento por proximidade de referência. Essa opção é o padrão |
| ras | Configura uma sinalização no cabeçalho auxiliar do módulo de saída para significar que o módulo é tanto cofre de armazenamento seguro como de recuperação. Para obter mais informações sobre como tornar uma extensão kernel segura para chave e segura para recuperação, consulte Conceitos de Programação de Extensões de Kernel e Suporte de Dispositivo |
| rename:Símbolo, NewName | Renomeia o símbolo externo Símbolo para NewName. Na verdade, é como se todas as definições e referências ao Símbolo em todos os arquivos de objeto fossem renomeadas para NewName antes que os arquivos fossem processados... Por padrão, os símbolos não são renomeados. |
| reorder | Funciona da mesma forma que a opção r |
| ro ou textro | Assegura que não haja entradas de relocação de tempo de carregamento para a seção de texto do arquivo de objeto resultante. O padrão é a opção nro .. |
| rtl | Ativa a vinculação de tempo de execução para o arquivo de resultado Essa opção implica as opções rtllib e symbolic Quando o modo dinâmico estiver em vigor (consulte as opções dynamic e static ), a opção rtl permitirá que os arquivos de entrada especificados com o sinalizador -l terminem em .so e em .a. Todos os arquivos de entrada que são objetos compartilhados são listados como dependentes de seu programa na seção de carregadores de arquivos de saída. Os objetos compartilhados são listados na mesma ordem em que foram especificados na linha de comando. Um objeto compartilhado que está contido em um archive será listado apenas se o archive especificar o carregamento automático para o membro do objeto compartilhado É possível especificar o carregamento automático para um membro de archive foo.o criando um arquivo de importação com as seguintes linhas:
Após criar o arquivo de importação, inclua o arquivo de importação como um membro no archive. Você também pode especificar carregamento automático para um membro de archive foo.o usando a opção -bautoload :Você pode especificar mais membros de archive com a opção -bautoloads Se a primeira linha de um arquivo de importação começar com |
| rtllib | Essa opção inclui uma referência para o vinculador de tempo de execução O vinculador de tempo de execução é definido em librtl.a, e um sinalizador -lrtl implícito é incluído automaticamente na linha de comandos Esta opção (implícita pela opção rtl ) deve ser usada ao vincular um programa principal ou nenhuma vinculação de tempo de execução ocorre. Os objetos compartilhados não têm que ser vinculados a esta opção. O padrão é a opção nortllib a menos que a opção svr4 seja usada. |
| rwexec | Especifica que as permissões de execução das áreas de dados privados do processo são determinadas de acordo com a configuração sed_config do sistema.. Essa opção é o padrão |
| rwexec_must | Especifica que as áreas de dados privados do processo têm permissão de execução, independentemente da configuração sed_config do sistema.. |
| S:Número | Funciona da mesma forma que o sinalizador -S |
| scalls:FileID | Grava um mapa de endereço do arquivo de objeto para FileID. Os símbolos são listados alfabeticamente. Para cada símbolo listado no mapa, são listadas referências do símbolo para os outros símbolos. Por padrão, nenhum arquivo é produzido. Para saber mais sobre a opção scalls , consulte Mapas de Endereço. |
| shared | Funciona da mesma forma que a opção dynamic |
| shrsymtab | Em modo de 64-bit bits, configura a sinalização _AOUT_SHR_SYMTAB no cabeçalho auxiliar do XCOFF. Se o Arquivo for um programa de 64 bits, uma tabela de símbolo compartilhado será criada quando o programa for executado Se Arquivo for um objeto de 64 bits, mas não um programa de 64 bits, a sinalização _AOUT_SHR_SYMTAB poderá ser configurada, mas não terá efeito no tempo de execução. Em modo de 32-bit bits, esta bandeira é ignorada. O padrão é noshrsymtab.. |
| smap:FileID | Grava um mapa de endereço do arquivo de objeto para FileID. Os símbolos são listados alfabeticamente. Por padrão, nenhum arquivo é produzido. Para saber mais sobre a opção smap , consulte Mapas de Endereços a seguir: |
| so | Funciona da mesma forma que a opção autoimp |
| stabcmpct:Nível | Especifica o nível de compactação para stabstrings na seção de debug. Os stabstrings são strings que são mais longos do que oito caracteres. Cada substring na tabela de símbolos tem seu próprio deslocamento na seção de depuração. Os valores a seguir são válidos para Nível:
|
| stabsplit | Essa opção faz a seção de depuração ser gravada em um arquivo de saída alternativo com a extensão .stab. |
| stackpsize:psize | Solicita tamanhos de página psize em bytes para processar a pilha de encadeamento principal. O valor pode ser especificado como um número decimal, hexadecimal ou octal. As especificações de número são as mesmas que na linguagem de programação C. Além disso, o tamanho da página pode ser especificado como um número seguido por um sufixo de um caractere:
-b stackpsize:16k ou -b stackpsize:0x4000 solicitações 0x4000 para a pilha de encadeamento principal do processo e configure o bit F_VARPG no cabeçalho XCOFF |
| static | Essa opção faz com que o vinculador processe objetos compartilhados subsequentes no modo estático. No modo estático, os objetos compartilhados estão estaticamente ligados no arquivo de saída. |
| svr4 | Esta opção altera o significado de algumas outras opções na linha de comando e o comportamento padrão do linker. Ele tem o seguinte efeito sobre o linker:
|
| sxref:FileID | Grava um mapa de endereço do arquivo de objeto para FileID. Os símbolos são listados alfabeticamente. Para cada símbolo listado no mapa, são listadas referências ao símbolo de outros símbolos. Por padrão, nenhum arquivo é produzido. Para saber mais sobre a opção sxref , consulte Mapas de Endereços a seguir: |
| symbolic | Designa o atributo symbolic para a maioria dos símbolos exportados sem um atributo explícito Para obter mais informações, consulte Atributos de símbolos exportados a seguir. Essa opção é o padrão quando a opção svr4 é usada Caso contrário, o padrão será a opção symbolic- |
| textro | Igual à opção ro . |
| textpsize:psize | Solicita tamanhos de página de psize em bytes para texto O valor pode ser especificado como um número decimal, hexadecimal ou octal. As especificações de número são as mesmas que na linguagem de programação C. Além disso, o tamanho da página pode ser especificado como um número seguido por um sufixo de um caractere:
-b textpsize:16k ou -b textpsize:0x4000 solicita 0x4000 para texto e configura o bit F_VARPG no cabeçalho XCOFF. |
| tmplrename | Especifica que o binder deve verificar instanciações gerais. O componente de ligação verifica qualquer símbolo no formato __tfNNxxx_name e renomeia o símbolo para name. O padrão é -bnotmplrename.. Nota: Esta opção só é necessária para o modo 32-bit bits. Essa opção é ignorada ao construir 64-bit objetos.
|
| typchk | Executa verificação de tipo de função-parâmetro entre chamadas funcionais externas. As informações da verificação de tipo de Parâmetro podem ser incluídas em arquivos de objeto por compiladores e montadores Essa opção é o padrão Para obter mais informações sobre a verificação de tipo, consulte XCOFF Object File Format. |
| weaklocal | Especifica que símbolos fracos são pesquisados por primeiro nos arquivos de objetos onde eles são referenciados. Se os símbolos não forem encontrados lá, a ordem de busca normal é retomada. |
| x | Torna o arquivo de saída um arquivo executável, se não existir nenhum erro Essa opção é a opção padrão |
| X ou xref:FileID | Grava um mapa de endereço do arquivo de objeto para FileID. Os símbolos são classificados por seção e, em seguida, por endereço. Para cada símbolo listado no mapa, são listadas referências ao símbolo de outros símbolos. Por padrão, nenhum arquivo é produzido. Para saber mais sobre a opção xref , consulte Mapas de Endereços a seguir: |
Linking de tempo de execução
Por padrão, as referências a símbolos em objetos compartilhados são ligadas no horário do link. Ou seja, o módulo de saída associa um símbolo importado a uma definição em um objeto compartilhado específico. No tempo de carregamento, a definição no objeto compartilhado especificado é usada, mesmo se outros objetos compartilhados exportarem o mesmo símbolo
É possível fazer com que seu programa use o vinculador de tempo de execução, permitindo que alguns símbolos sejam recuperados no tempo de carga Para criar um programa que usa o vinculador de tempo de execução, vincule o programa com a opção -brtl A forma como os módulos compartilhados são vinculados afeta a religação de símbolos.
É possível construir objetos compartilhados que são ativados para link de tempo de execução usando a sinalização -G . É possível ativar totalmente a vinculação de tempo de execução para objetos compartilhados existentes vinculando-os novamente ao comando rtl_enable , a menos que eles sejam removidos.
Visibilidade Símbolo
Os símbolos globais e fracos em um arquivo de objeto de entrada podem ser marcados com um símbolo de visibilidade Quatro visibilidades de símbolos são definidas.
| Símbolo | Visibilidade |
|---|---|
| Interno | O símbolo não é exportado O endereço do símbolo não deve ser fornecido a outros programas ou objetos compartilhados, mas o linker não verifica isso. |
| Oculto | O símbolo não é exportado |
| Protegido | O símbolo é exportada, mas não pode ser recuperado (ou antecipado), mesmo se o link de tempo de execução estiver sendo usado. |
| Exportado | O símbolo é exportada com o atributo de exportação global |
A visibilidade de um símbolo pode ser especificada em um arquivo de origem do assembler. Alguns compiladores apoiam a visibilidade também. Consulte a documentação do seu compilador para obter detalhes.
Os arquivos de exportação também podem ser usados para especificar a visibilidade para um símbolo. Normalmente, a visibilidade especificada em um arquivo de exportação tem precedência sobre a visibilidade especificada no arquivo de objeto. Este linker considera a visibilidade do símbolo ao criar a lista de exportação para um programa ou objeto compartilhado.
Formato de arquivo de importação e exportação (sinalizadores-bI: e ' -bE: )
Cada linha dentro de um arquivo de importação ou exportação contém o nome de um símbolo, opcionalmente seguido por um endereço ou por uma palavra-chave. As palavras-chave primárias são svc, svc32, svc3264, svc64, syscall, syscall32, syscall3264, syscall64, symbolic, nosymbolic, nosymbolic-, list, cm, bss, internal, hidden, protectede export. Mais algumas palavras-chave são weak e required, que podem ser usadas juntamente com outra palavra-chave.
Em um arquivo de importação, especificar um endereço permite que um símbolo seja mapeado para um endereço fixo, como um endereço em um segmento de memória compartilhada. Também é possível usar uma das palavras-chave cm, bssou weak para especificar a classe de armazenamento de um símbolo importado. Quando a opção autoexp é usada, a classe de armazenamento de um símbolo importado afeta quais símbolos são exportados automaticamente.. Se alguma outra palavra-chave for especificada em um arquivo de importação, a palavra-chave será ignorada.
Em um arquivo de exportação, é possível usar a palavra-chave svc, svc32, svc3264, svc64, syscall, syscall32, syscall3264ou syscall64 após um nome de função para indicar que a função é uma chamada do sistema... Esta opção é necessária ao vincular extensões de kernel. Se o arquivo de saída não for uma extensão de kernel, essas palavras-chave serão equivalentes à palavra-chave symbolic
É possível usar a palavra-chave list para fazer com que um símbolo seja listado na seção do carregador do arquivo de saída, embora ele não esteja marcado como um símbolo exportado A palavra-chave list pode ser usada para aplicativos que desejam processar alguns símbolos no tempo de execução.. Os símbolos listados não são processados pelo carregador do sistema ou pelo vinculador de tempo de execução
É possível usar a palavra-chave symbolic, nosymbolicou nosymbolic-para associar um atributo a um símbolo exportado Um endereço de símbolo em um arquivo de exportação é ignorado. Em um arquivo de exportação, as palavras-chave cm e bss são equivalentes à palavra-chave nosymbolic . A visibilidade de um símbolo pode ser especificada com as palavras-chave internal, hidden, protectedou export . Para obter mais informações, consulte.Atributos de símbolos exportados
A palavra-chave weak pode ser usada para especificar uma ligação de símbolo fraco e pode ser usada com outro atributo..
Use a palavra-chave required para verificar se um símbolo está definido e não foi importado Um erro é impresso para símbolos que não atendem a esses critérios.
O comando ld trata os arquivos de importação e exportação de acordo com as diretrizes a seguir:
- Uma linha em branco é ignorada.
- Uma linha começando com um * (asterisco) é um comentário e é ignorada.
Uma linha que começa com um # (#, espaço em branco) fornece operandos para o subcomando setopt binder (-bdbg:Option). Por exemplo, uma linha que contém
# verbosefaz com que o componente de ligação liste cada símbolo conforme ele é lido do arquivo. Essas configurações de opção estão ativas apenas enquanto processam o arquivo. As opções # 32, # 64, # no32e # no64 podem ser usadas para especificar se os símbolos listados devem ser usados para links de 32 bits, links de 64 bits, ou ambos32-bit and 64-bit Import File Options
Item Descrição 32 Essa opção é usada em um arquivo de importação ou exportação para especificar que símbolos subsequentes devem ser processados ao vincular no modo de 32 bits, mas ignorados ao vincular no modo de 64 bits. Se nenhuma opção 32 ou 64 for especificada, todos os símbolos serão processados nos modos de 32 e 64 bits. 64 Essa opção é usada em um arquivo de importação ou exportação para especificar que os símbolos subsequentes devem ser processados ao vincular no modo de 64 bits, mas ignorados ao vincular no modo de 32 bits Se nenhuma opção 32 ou 64 for especificada, todos os símbolos serão processados nos modos de 32 e 64 bits. no32 ou no64 Substituir um 32 ou 64anterior. Os símbolos subsequentes são processados em ambos os modos de 32 e 64-bit. - Ao processar um arquivo de importação, uma linha começando com um #! (#, ponto de exclamação) fornece o nome da biblioteca compartilhada para ser associado a símbolos de importação subsequentes. A linha pode ocorrer mais de uma vez e se aplica aos símbolos subsequentes até que a próxima linha que começa com '
#!seja lida. Essas informações de nome do arquivo são colocadas na seção do carregador do arquivo objeto XCOFF. Ele é usado pelo carregador do sistema para localizar o arquivo de objeto apropriado no tempo de execução. Se o nome do arquivo de importação for ' ipath/ifile (imember), o nome do arquivo que é colocado na seção do carregador é determinado com base no nome do arquivo de importação e no conteúdo da linha '#!do arquivo de importação, como segue:Item Descrição #! (Nada após o #!) Use caminho nulo, arquivo nulo e número nulo. Essa opção é tratada como uma importação adiada pelo carregador do sistema.#! () Use ipath,ifileeimember. Essa linha poderá ser usada se o arquivo de importação for especificado como um parâmetro InputFile na linha de comandos O arquivo deve começar com#!, neste caso, Essa linha também pode ser usada para restaurar o nome padrão se ele tiver sido alterado por outra linha#!#! path/arquivo (membro) Use o caminho especificado, arquivo e membro. #! path/arquivo Use o caminho e o arquivo especificado, e um membro nulo. #! arquivo Use um caminho nulo, o arquivo especificado e um membro nulo. No tempo de execução, uma lista de diretórios é procurada para encontrar o objeto compartilhado. #! (membro) Use ipath,ifilee o membro especificado.. No tempo de execução, uma lista de diretórios é procurada para encontrar o objeto compartilhado.#! arquivo (membro) Use um caminho nulo e arquivo e membro especificado. No tempo de execução, uma lista de diretórios é procurada para encontrar o objeto compartilhado. #! . (Um único ponto) Este nome se refere ao arquivo executável principal. Use este nome de arquivo quando estiver criando um objeto compartilhado que importa símbolos de vários programas principais com nomes diferentes. O programa principal deve exportar símbolos que são importados por outros módulos ou o carregamento falha. Esse nome do arquivo de importação pode ser usado com ou sem o vinculador de execução. #! .. (Dois pontos) Use esse nome para listar símbolos que são resolvidos pelo vinculador de tempo de execução. Use esse nome de arquivo para criar objetos compartilhados que são usados pelos programas que usam o vinculador de tempo de execução Se você usar um módulo que importa símbolos de .. em um programa que não foi vinculado com a opção rtllib , os símbolos serão não resolvidos e as referências a esses símbolos resultarão em comportamento indefinido
Para carregar automaticamente os membros de archive quando a opção -brtl for usada, é possível criar um arquivo de importação da seguinte forma:.... Se shr.so for um objeto compartilhado em um archive, crie um arquivo de importação:
# autoload
#! (shr.so)
É possível listar nomes de membros extras em mais linhas, se apropriado Não é necessário listar nomes de símbolos no arquivo de importação porque os símbolos importados do shr.so são lidos do próprio shr.so .
Para obter mais informações sobre a criação de uma biblioteca compartilhada, consulte Criação de uma biblioteca compartilhada. Para obter mais informações sobre carregamento e vinculação, consulte a sub-rotina ' load.
Atributos de Símbolos Exportados
Ao usar a vinculação de tempo de execução, uma referência a um símbolo no mesmo módulo poderá ser recuperada somente se o símbolo for exportado com o atributo apropriado.. As referências a símbolos com o atributo symbolic não podem ser recuperadas As referências a símbolos com o atributo nosymbolic podem ser recuperadas As referências a símbolos com o atributo nosymbolic- poderão ser recuperadas se os símbolos forem variáveis Para símbolos de função, as chamadas usando um ponteiro de função podem ser recuperadas, enquanto as chamadas de função direta não podem ser recuperadas. O atributo nosymbolic- é o padrão e fornecido para compatibilidade com versões anteriores do sistema operacional, mas seu uso não é recomendado.
Se você não estiver usando o vinculador de tempo de execução, evite usar o atributo nosymbolic porque as chamadas de função intra-módulo são feitas indiretamente por meio de um descritor de função usando o código de ligação global. Caso contrário, o atributo de símbolos exportados não terá efeito para módulos usados com programas que não usam o vinculador de tempo de execução.
É possível especificar um atributo de exportação explícito para símbolos listados em um arquivo de exportação. A maioria dos símbolos sem um atributo explícito são exportados com o atributo de exportação padrão, conforme especificado com as opções symbolic, nosymbolicou nosymbolic- .
Se um símbolo é listado em um arquivo de exportação sem uma palavra-chave, e a visibilidade do símbolo é especificada em um arquivo de entrada, a visibilidade do símbolo é preservada. A visibilidade de um símbolo de entrada pode ser substituída usando a palavra-chave internal, hidden, protectedou export .
O atributo de exportação weak marca o tipo de mapeamento do símbolo associado com L_WEAK na seção do carregador..
Os símbolos importados podem ter apenas o atributo de exportação weak Se um símbolo for importado de outro módulo, todas as referências ao símbolo poderão ser recuperadas. No entanto, se um símbolo for importado em um endereço fixo, todas as referências serão ligadas a esse endereço fixo e não poderão ser recuperadas pelo vinculador de tempo de execução O carregador do sistema deve resolver as importações adiadas. O vinculador de tempo de execução nunca resolve ou religa referências a importações adiadas.
Para exportações de símbolos não importados, as seguintes regras são usadas.
- Se um símbolo tiver o atributo list , ele será listado na tabela de símbolos da seção do carregador, mas o sinalizador L_EXPORT não será configurado na entrada da tabela de símbolo O vinculador de tempo de execução ignora esses símbolos
- Se um símbolo foi exportado com um atributo explícito ou com uma visibilidade explícita, o atributo explícito ou visibilidade será usado.
- Se o símbolo for um símbolo de BSS, ele será exportado com o atributo nosymbolic
- Caso contrário, o símbolos será exportada com o atributo global, conforme especificado pela opção symbolic, nosymbolicou nosymbolic- O atributo global padrão é nosymbolic-
Mapas De Endereço
O comando ld gera mapas de endereço, listando o layout de símbolos no arquivo de objeto de saída.. Se você usar a opção map (ou R), símbolos não resolvidos e símbolos importados serão listados primeiro, seguidos pelos símbolos em cada seção na ordem de endereço. Se você usar a opção calls (ou C), cada símbolo listado será seguido por uma lista de referências desse símbolo para outros símbolos. Se você usar a opção xref (ou X), cada símbolo listado será seguido por uma lista de referências a esse símbolo a partir de outros símbolos. Se você usar a opção smap, scallsou sxref , o mapa de endereço conterá as mesmas informações listadas pela opção map, callsou xref , mas os símbolos serão listados em ordem alfabética.
Os símbolos internos, com uma classe de armazenamento C_HIDEXT, são impressos com os caracteres < e > (sinais de maior e menor) ao redor do nome do símbolo. Os nomes de símbolos externos, com uma classe de armazenamento C_EXT, são impressos sem os sinais de maior e menor e os símbolos com uma classe de armazenamento C_FRACEXT, são impressos com os caracteres { e } em torno do nome do símbolo.
As seguintes informações são listadas sobre cada símbolo:
- Uma indicação de se o símbolo é importado, exportado ou o ponto de entrada. Um * (asterisco) é usado para marcar o ponto de entrada, I é usado para marcar símbolos importados e E é usado para marcar símbolos exportados.
- Seu endereço (exceto para símbolos importados)
- Comprimento e alinhamento (para CSECTs e símbolos BSS)
- Classe de mapeamento de armazenamento
- 'Tipo de' 'Símbolo'
- Número do símbolo (usado para diferenciar entre símbolos de mesmo nome)
- 'Nome do' Símbolo
- Informações do arquivo de entrada
Classes de mapeamento de armazenamento e tipos de símbolos são definidos no arquivo /usr/include/syms.h . Nos mapas de endereço, apenas os últimos dois caracteres são mostrados, exceto que a classe de mapeamento de armazenamento XMC_TC0 é mostrada como T0..
As informações do arquivo de entrada dependem do tipo de arquivo de entrada. Para arquivos de objeto, os nomes de arquivos de origem que são obtidos a partir de entradas de tabelas de símbolos C_FILE são listados Se o objeto for de um arquivo de arquivo, o nome do arquivo objeto será listado no seguinte formato:
ArchiveFileName[ObjectName]
Um nome de objeto compartilhado é listado entre { } (chaves). Se um objeto compartilhado for definido por um arquivo de importação, o nome do arquivo de importação será listado antes do nome do objeto compartilhado.
Os símbolos de importação têm um tipo de símbolo de ER, mas eles têm informações de entrada de arquivo associadas. Símbolos indefinidos também são listados com um tipo de símbolo de ER, mas todas as outras colunas, exceto o número do símbolo, são deixadas em branco.
Os sinalizadores -T e -D (ou opções pT ou pD ) afetam os endereços impressos nesses mapas de endereço. Para depuração de nível de máquina, é útil escolher endereço para que os símbolos sejam listados com os mesmos endereços que eles têm em tempo de execução. Para um programa de 32 bits que não usa objetos compartilhados carregados de forma privada, é possível escolher os endereços adequados especificando as opções -bpT:0x10000000 e -bpD:0x20000000 Essas opções são definidas por padrão no arquivo /etc/xlC.cfg ou /etc/vac.cfg .
Variáveis de ambiente
As seguintes variáveis de ambiente afetam a execução do comando ld :
| Item | Descrição |
|---|---|
| LIBPATH | Se LIBPATH for definido, seu valor será usado como informação padrão do caminho da biblioteca. O caminho da biblioteca padrão é /usr/lib:/lib Se nenhum sinalizador -L for especificado e nenhuma opção -blibpath for especificada, as informações do caminho da biblioteca padrão serão gravada na seção do carregador do arquivo de saída. Independentemente de quaisquer opções especificadas, LIBPATH não é usado ao procurar bibliotecas que são especificadas a partir da linha de comando. |
| TMPDIR | Se o arquivo de saída existir ou estiver em um sistema de arquivos remoto, o comando ld gerará um arquivo de saída temporário. O arquivo de saída temporário é criado no diretório especificado por TMPDIR. Se o TMPDIR não estiver definido, o arquivo de saída temporário será criado no diretório /tmp se o arquivo de saída for remoto ou no mesmo diretório que o arquivo de saída existente |
| OBJETIVO-MODE | Se nem a opção -b32 nem -b64 for usada, a variável de ambiente OBJECT_MODE será examinada para determinar o modo de vinculação.. Se o valor de OBJECT_MODE for 32 ou 64, o modo de 32 bits ou 64 bits será usado. Se o valor for 32_64 ou qualquer outro valor, o vinculador imprimirá uma mensagem de erro e sairá com um código de retorno diferente de zero. Caso contrário, um modo de 32 bits será usado |
Exemplos
- Para vincular vários arquivos de objeto e produzir um arquivo a.out para execução no sistema operacional, insira o comando a seguir:
A -lc (letra minúscula L) vincula a biblioteca libc.a .. Uma maneira mais simples de vincular a biblioteca libc.a é usar o comando cc (o compilador) para vincular os arquivos conforme a seguir:ld /usr/lib/crt0.o pgm.o subs1.o subs2.o -lccc pgm.o subs1.o subs2.o - Para especificar o nome do arquivo de saída, insira o comando a seguir:
Isso cria a saída no arquivo pgmcc -o pgm pgm.o subs1.o subs2.o - Para vincular novamente pgm se apenas o arquivo de objeto subs1.o foi alterado, insira o comando a seguir:
Os CSECTs que vieram originalmente dos arquivos de objeto pgm.o e subs2.o são lidos do arquivo pgm. Essa técnica pode acelerar o processo de vinculação se um programa consiste em muitos arquivos de entrada, mas apenas alguns arquivos mudam de uma vez.cc -o pgm subs1.o pgm - Para vincular com sub-rotinas da biblioteca, insira o comando a seguir:
Isso vincula os módulos de objeto pgm.o, subs1.oe subs2.o, as sub-rotinas do archive mylib.a e a sub-rotina da biblioteca especificada pelo sinalizador -l (letra L minúscula) (isso significa o arquivo /usr/lib/libtools.a ).cc pgm.o subs1.o subs2.o mylib.a -ltools - Para gerar um objeto compartilhado, insira o comando a seguir:
Isso vincula os arquivos de objeto subs1.o, subs2.oe as sub-rotinas da biblioteca libc.a especificada pela sinalização -lc . Ele exporta os símbolos especificados no arquivo shrsub.exp e armazena o objeto compartilhado vinculado no arquivo shrsub.o. O -bM:SRE configura o sinalizador de objeto compartilhado no arquivo de objeto vinculadold -o shrsub.o subs1.o subs2.o -bE:shrsub.exp -bM:SRE -lc - Para vincular-se ao objeto compartilhado shrsub.o gerado anteriormente, insira o comando a seguir:
Isso vincula o arquivo de objeto pgm.o com os símbolos exportados de shrsub.o A saída vinculada é armazenada no arquivo de objeto pgm O -L '.' inclui o diretório atual no caminho da procura da biblioteca que o carregador do sistema usa para localizar o objeto compartilhado shrsub.o No tempo de execução, este programa será carregado apenas se ele for executado a partir de um diretório que contém uma instância do arquivo shrsub.o ou se o arquivo shrsub.o estiver localizado no diretório da biblioteca padrão /usr/lib Para permitir que o programa seja executado de qualquer lugar, use a opção -L `pwd`.cc -o pgm pgm.o shrsub.o -L '.'A lista de diretórios procurados pelo carregador do sistema pode ser vista usando o comando dump ..
- Para vincular um programa usando a biblioteca libc.a como uma biblioteca não compartilhada, insira o comando a seguir:
Isso vincula pgm.o às bibliotecas de suporte necessárias e nomeia o arquivo de saída pgm. Para o comando cc , a biblioteca libc.a é uma biblioteca de suporte necessária e é vinculada ao programa do usuário como uma biblioteca compartilhada. Neste exemplo, a opção -bnso direciona o comando ld para vincular à biblioteca libc.a como uma biblioteca não compartilhada e o comando -bI:/lib/syscalls.exp direciona o comando ld para importar as funções de chamada do sistema que estão contidas no kernel ou arquivo /usr/lib/boot/unix . Sempre que vincular com a opção -bnso , quaisquer símbolos que foram importados e exportados (ou seja, transmitidos) em um objeto compartilhado devem ser importados explicitamente, como é feito pela opção -bI:/lib/syscalls.exp neste exemplo.cc -o pgm pgm.o -bnso -bI:/lib/syscalls.expNota: sempre que /usr/lib/libc.a estiver vinculado não compartilhado, o sinalizador -bI:/lib/syscalls.exp deverá ser usado. O aplicativo também pode ter de ser vinculado novamente sempre que uma versão atualizada do sistema operacional for instalada. Qualquer aplicativo estaticamente vinculado não é móvel binário de qualquer nível de correção ou liberação para qualquer outro nível de correção ou liberação. - Para ativar os atributos de randomização, digite o seguinte comando:
-baslrSe houver realocações de seções de texto, não ative a randomização de texto e dados.
- Para ativar a randomização somente para texto e pilha, digite o seguinte comando:
-baslr:ts
Arquivos
| Item | Descrição |
|---|---|
| /usr/bin/ld | Contém o comando ld |
| /usr/lib/lib*.a | Especifica as bibliotecas que são utilizadas para vincular programas |
| a.out | Especifica o nome do arquivo de saída padrão. |