Tuesday, 2 May 2017

Ld Formato Binário Opções



Alguém tem uma idéia de como compilar estaticamente qualquer arquivo de recursos diretamente no arquivo executável ou o arquivo de biblioteca compartilhada usando GCC Por exemplo Id como adicionar arquivos de imagem que nunca mudam (e se o fizerem, Id tem que substituir o arquivo de qualquer maneira) e não iria querer Eles para mentir ao redor no sistema de arquivos. Se isso é possível (e eu acho que é porque o Visual C para Windows pode fazer isso, também), como posso carregar os arquivos que são armazenados no próprio binário O executável analisar-se, encontrar o arquivo e extrair os dados de Talvez haja uma opção para o GCC que eu ainda não vi. Usando os motores de busca didnt realmente cuspir as coisas certas. Eu precisaria disso para trabalhar em bibliotecas compartilhadas e executáveis ​​ELF normais. Qualquer ajuda é apreciada Dá algo como: Para compatibilidade com outro código, você pode usar fmemopen para obter um objeto FILE regular, ou, em alternativa std :: stringstream para fazer um iostream. Std :: stringstream não é ótimo para isso e você pode naturalmente usar um ponteiro em qualquer lugar você pode usar um iterador. Se você está usando isso com automake não se esqueça de configurar BUILTSOURCES adequadamente. A coisa agradável sobre fazê-lo desta maneira é: Você obtem o texto para fora, assim que pode estar no controle de versão e em remendos sensivelmente É portátil e bem definido em cada plataforma respondida Feb 1 11 em 16:04 Update Eu cresci preferir o controle John Ripleys assembly. incbin solução baseada oferece e agora usar uma variante sobre isso. Eu usei objcopy (GNU binutils) para vincular os dados binários de um arquivo foo-data. bin na seção de dados do executável: Isto dá-lhe um arquivo de objeto foo-data. o que você pode vincular em seu executável. A interface C parece algo assim, você pode fazer coisas como: Se sua arquitetura de destino tem restrições especiais para onde os dados constantes e variáveis ​​são armazenados ou se deseja armazenar esses dados no segmento. text para torná-lo encaixar no mesmo tipo de memória Como o código do programa, você pode jogar com os parâmetros objcopy um pouco mais. Respondeu Feb 1 11 at 16:36 good idea No meu caso não é muito útil. Mas isso é algo que eu realmente vou colocar em minha coleta de trechos. Obrigado por compartilhar este ndash Atmocreations Feb 1 11 at 18:04 It39s um pouco mais fácil de usar ld como o formato de saída está implícito lá, veja stackoverflowa4158997201725. Ndash Jan Hudec Mar 11 14 às 18:40 Você pode incorporar arquivos binários em executável usando ld linker. Por exemplo, se você tiver arquivo foo. bar, então você pode incorporá-lo no executável adicionando os seguintes comandos para ld Se você estiver invocando ld através de gcc, então você precisará adicionar - Wl Aqui --formatbinary informa o vinculador que o seguinte arquivo é Binário e --formatdefault retorna ao formato de entrada padrão (isso é útil se você especificar outros arquivos de entrada após o foo. bar). Então você pode acessar o conteúdo do seu arquivo de código: Há também um símbolo chamado binaryfoobarsize. Eu acho que é do tipo uintptrt, mas eu não o verifiquei. Recentemente tive a necessidade de incorporar um arquivo em um executável. Desde que eu estou trabalhando na linha de comando com gcc, et al e não com uma ferramenta RAD fantasia que faz tudo acontecer magicamente não era óbvio para mim como fazer isso acontecer. Um pouco de pesquisa na rede encontrou um hack para essencialmente cat-lo para o final do executável e, em seguida, decifrar onde ele foi baseado em um monte de informações que eu não queria saber sobre. Parecia que deveria haver uma maneira melhor. E há, seu objcopy ao salvamento. Objcopy converte arquivos de objeto ou executáveis ​​de um formato para outro. Um dos formatos que entende é binário, que é basicamente qualquer arquivo thats não em um dos outros formatos que entende. Então, você provavelmente previu a idéia: converter o arquivo que queremos incorporar em um arquivo de objeto, então ele pode simplesmente ser ligado com o resto do nosso código. Vamos dizer que temos um nome de arquivo data. txt que queremos incorporar no nosso executável: Para converter isso em um arquivo de objeto que podemos vincular com o nosso programa que acabamos de usar objcopy para produzir um arquivo. O: Isto diz objcopy que a nossa entrada Arquivo está no formato binário, que nosso arquivo de saída deve estar no formato elf32-i386 (arquivos de objeto no x86). A opção --binary-architecture diz ao objcopy que o arquivo de saída deve ser executado em um x86. Isso é necessário para que ld aceite o arquivo para vinculação com outros arquivos para o x86. Alguém poderia pensar que especificando o formato de saída como elf32-i386 iria implicar isso, mas não. Agora que temos um arquivo de objeto, só precisamos incluí-lo quando executamos o linker: Quando executamos o resultado, obtemos a oração para saída: Claro, eu ainda não contei a história inteira, nem mostrei o main. c. Quando objcopy faz a conversão acima, ele adiciona alguns símbolos de vinculador ao arquivo de objeto convertido: Após a vinculação, esses símbolos especificam o início eo fim do arquivo incorporado. Os nomes dos símbolos são formados pelo prefixo binário e acrescentando início ou fim ao nome do arquivo. Se o nome do arquivo contiver quaisquer caracteres que seriam inválidos em um nome de símbolo, eles serão convertidos em sublinhados (por exemplo, data. txt torna-se datatxt). Se você obter nomes não resolvidos ao vincular usando esses símbolos, faça um hexdump - C no arquivo de objeto e olhe para o final do despejo para os nomes que objcopy escolheu. O código para realmente usar o arquivo incorporado agora deve ser razoavelmente óbvio: Uma coisa importante e sutil a ser observada é que os símbolos adicionados ao objeto são variáveis ​​arent. Eles não contêm quaisquer dados, em vez disso, seu endereço é o seu valor. Eu declará-los como tipo char porque é conveniente para este exemplo: os dados incorporados são dados de caracteres. No entanto, você pode declará-los como qualquer coisa, como int se os dados são uma matriz de inteiros, ou como struct foobart se os dados foram qualquer matriz de foo bares. Se os dados incorporados não forem uniformes, então char é provavelmente o mais conveniente: pegue seu endereço e lance o ponteiro para o tipo apropriado à medida que percorrer os dados. Respondeu Apr 1 11 em 20: 39Linux e Unix ld comando ld combina um número de objetos e arquivos de arquivo, relocates seus dados e amarra referências de símbolo. Geralmente, a última etapa na compilação de um programa é executar ld. Ld aceita arquivos de Linguagem de Comandos de Linker escritos em um superconjunto da sintaxe do Linguagem de Comando do Link Editor do ATAMPT, para fornecer controle explícito e total sobre o processo de vinculação. Para obter detalhes completos sobre o idioma do comando ld, consulte a página de informações do ld. Aqui, bem cobrir uma ampla visão geral de como usar GNU ld, que é usado na maioria das versões do Linux. Esta versão do ld usa as bibliotecas BFD de uso geral para operar em arquivos de objeto. Isso permite que ld leia, combine e escreva arquivos de objetos em vários formatos diferentes: por exemplo, COFF ou a. out. Diferentes formatos podem ser ligados entre si para produzir qualquer tipo de arquivo de objeto disponível. Além de sua flexibilidade, o linker GNU é mais útil do que outros vinculadores no fornecimento de informações de diagnóstico. Muitos vinculadores abandonam a execução imediatamente após encontrar um erro sempre que possível, ld continua executando, permitindo identificar outros erros (ou, em alguns casos, obter um arquivo de saída apesar do erro). O linker GND ld destina-se a cobrir uma ampla gama de situações e a ser tão compatível quanto possível com outros ligantes. Como resultado, você tem muitas opções para controlar seu comportamento. O vinculador suporta muitas opções de linha de comando, mas na prática, algumas delas são usadas em qualquer contexto específico. Por exemplo, um uso freqüente de ld é ligar arquivos de objeto Unix padrão em um sistema padrão Unix suportado. Em tal sistema, para ligar um arquivo hello. o: Isto diz ld para produzir um arquivo chamado saída como resultado de ligar o arquivo libcrt0.o com hello. o ea biblioteca libc. a, que virá da pesquisa padrão Diretórios. Veja a opção - l abaixo. Algumas das opções de linha de comando para ld podem ser especificadas em qualquer ponto da linha de comando. No entanto, as opções que se referem a arquivos, como - l ou - T. Fazer 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 não-arquivo com um argumento diferente não terá efeito adicional ou substituirá as ocorrências anteriores (aquelas mais à esquerda na linha de comando) dessa opção. As opções que podem ser especificadas mais de uma vez são anotadas nas descrições abaixo. Os argumentos não-opção são arquivos de objeto ou arquivos que devem ser ligados em conjunto. 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. Geralmente, o vinculador é invocado com pelo menos um arquivo de objeto, mas você pode especificar outras formas de arquivos de entrada binária usando - l. - R. E a linguagem de comando do script. Se nenhum arquivo de entrada binária for especificado, o vinculador não produz qualquer saída e emite a mensagem Sem arquivos de entrada. Se o vinculador não pode reconhecer o formato de um arquivo de objeto, ele assumirá que ele é um script de vinculador. Um script especificado dessa maneira aumenta o script de vinculador principal usado para o link (ou o script de vinculador padrão ou o especificado usando - T). Esse recurso permite que o vinculador vincule em 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. Especificar um script dessa maneira apenas aumenta o script de vinculador principal, com os comandos extras colocados após o script principal use a opção - T para substituir o script de vinculador padrão por completo, mas observe o efeito do comando INSERT. Para opções cujos nomes são uma única letra, os argumentos de opção devem seguir a letra da opção sem intervir em espaço em branco. Ou ser dados como argumentos separados imediatamente após a opção que os requer. Para opções cujos nomes são múltiplas letras, um traço ou dois podem preceder o nome da opção, por exemplo, - trace-symbol e - trace-symbol são equivalentes. Observe que há uma exceção a esta regra: múltiplas opções de letra que começam com um minúsculo o só pode ser precedida por dois traços. Isso é para reduzir a confusão com a opção - o. Assim, por exemplo, - omagic define o nome do arquivo de saída para magic, enquanto --omagic 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 dados como argumentos separados imediatamente após a opção que os requer. Por exemplo, --trace-symbol foo e --trace-symbolfoo são equivalentes. Aceitam-se abreviaturas únicas dos nomes das opções de várias letras. Observe que se o vinculador está sendo invocado indiretamente, por meio de um driver de compilador (por exemplo, gcc), então todas as opções de linha de comando do vinculador devem ser prefixadas por - Wl. (Ou o que for apropriado para o driver de compilador específico) como este: Isso é importante, porque caso contrário, o programa do driver do compilador pode silenciosamente soltar as opções de vinculador, resultando em um link incorreto. Confusão também pode surgir ao passar opções que exigem valores através de um driver, como o uso de um espaço entre opção e argumento age como um separador e faz com que o driver para passar apenas a opção para o vinculador eo argumento para o compilador. Neste caso, é mais simples usar os formulários unidos de ambas as opções de letra única e múltipla, como: Aqui está uma tabela dos parâmetros de linha de comando genéricos aceitos pelo vinculador GNU: Leia as opções da linha de comando do arquivo. As opções lidas são inseridas no lugar da opção do arquivo original. Se o arquivo não existir ou não puder ser lido, a opção será tratada literalmente e não será removida. As opções no arquivo são separadas por espaços em branco. Um caractere de espaço em branco pode ser incluído em uma opção ao circundar a opção inteira em aspas simples ou duplas. Qualquer caractere (incluindo uma barra invertida) pode ser incluído prefixando o caractere a ser incluído com uma barra invertida. O arquivo pode conter opções de arquivo adicionais, tais opções serão processadas recursivamente. Esta opção é compatível com a compatibilidade HP-UX. O argumento de palavra-chave deve ser um do arquivo de strings. Compartilhado. Ou padrão. - aarchive é funcionalmente equivalente a - Bstatic. E as outras duas palavras-chave são funcionalmente equivalentes a - Bdinâmico. Esta opção pode ser usada qualquer número de vezes. Adiciona AUDITLIB à entrada DTAUDIT da seção dinâmica. AUDITLIB não é verificado para existência, nem usará o DTSONAME especificado na biblioteca. Se especificado várias vezes, DTAUDIT conterá uma lista separada por dois pontos das interfaces de auditoria a serem usadas. Se o vinculador encontrar um objeto com uma entrada de auditoria durante a pesquisa de bibliotecas compartilhadas, ele adicionará uma entrada DTDEPAUDIT correspondente no arquivo de saída. Esta opção só é significativa nas plataformas ELF que suportam a interface rtld-audit. Na versão atual do ld. Esta opção é útil somente para a família de arquiteturas Intel 960. Nessa configuração ld, o argumento de arquitetura identifica a arquitetura particular na família 960, permitindo algumas salvaguardas e modificando o caminho de pesquisa da biblioteca de arquivamento. Futuras versões do ld podem suportar funcionalidades semelhantes para outras famílias de arquitetura. Ld pode ser configurado para suportar mais de um tipo de arquivo de objeto. Se seu ld estiver configurado desta maneira, você pode usar a opção - b para especificar o formato binário para os arquivos de objeto de entrada que seguem esta opção na linha de comando. Mesmo quando o ld está configurado para suportar formatos de objetos alternativos, normalmente não é necessário especificar isso, pois ld deve ser configurado para esperar como formato de entrada padrão o formato mais comum em cada máquina. Input-format é uma string de texto, o nome de um formato particular suportado pelas bibliotecas BFD. Você pode listar os formatos binários disponíveis com objdump - i. Você pode usar essa opção se estiver vinculando arquivos com um formato binário incomum. Você também pode usar - b para alternar formatos de forma explícita (ao vincular arquivos de objetos de diferentes formatos), incluindo - b input-format antes de cada grupo de arquivos de objeto em um formato específico. O formato padrão é obtido a partir da variável de ambiente GNUTARGET. Você também pode definir o formato de entrada de um script, usando o comando TARGET Para compatibilidade com os vinculadores produzidos pela MRI, ld aceita arquivos de script escritos em uma linguagem de comando restrita e alternativa, descrita na seção MRI Compatible Script Files da documentação do GNU ld. Introduza arquivos de script MRI com a opção - c use a opção - T para executar scripts de vinculador escritos na linguagem de scripting ld de uso geral. Se MRI-cmdfile não existir, ld procura-lo nos diretórios especificados por quaisquer opções - L. Essas três opções são formas múltiplas equivalentes são suportadas para compatibilidade com outros vinculadores. Eles atribuem espaço a símbolos comuns mesmo que um arquivo de saída relocável seja especificado (com - r). O comando de script FORCECOMMONALLOCATION tem o mesmo efeito. Adiciona AUDITLIB à entrada DTDEPAUDIT da seção dinâmica. AUDITLIB não é verificado para existência, nem usará o DTSONAME especificado na biblioteca. Se especificado várias vezes DTDEPAUDIT conterá uma lista separada por dois pontos de interfaces de auditoria para usar. Esta opção só é significativa nas plataformas ELF que suportam a interface rtld-audit. A opção - P é fornecida para a compatibilidade do Solaris. Use a entrada como o símbolo explícito para iniciar a execução do programa, em vez do ponto de entrada padrão. Se não houver nenhum símbolo chamado entrada. O vinculador tentará analisar a entrada como um número e usar isso como o endereço de entrada (o número será interpretado na base 10 você pode usar um 0x para base 16 ou um 0 para base 8). Especifica uma lista de bibliotecas de arquivos a partir da qual os símbolos não devem ser exportados automaticamente. Os nomes das bibliotecas podem ser delimitados por vírgulas ou dois pontos. Especificando --exclude-libs ALL exclui símbolos em todas as bibliotecas de arquivos da exportação automática. Esta opção está disponível apenas para a porta de destino PE i386 do vinculador e para portas segmentadas por ELF. Para i386 PE, símbolos explicitamente listados em um arquivo. def ainda são exportados, independentemente dessa opção. Para portas segmentadas por ELF, os símbolos afetados por esta opção serão tratados como ocultos. Especifica uma lista de arquivos de objetos ou de membros do arquivo, dos quais os símbolos não devem ser exportados automaticamente, mas que devem ser copiados por atacado para a biblioteca de importação que está sendo gerada durante o link. Os nomes dos módulos podem ser delimitados por vírgulas ou dois pontos e devem corresponder exatamente aos nomes de arquivos usados ​​por ld para abrir os arquivos dos membros do arquivo, este é simplesmente o nome do membro, mas para os arquivos de objeto o nome listado deve incluir e corresponder exatamente qualquer caminho usado Para especificar o arquivo de entrada na linha de comando linkers. Esta opção está disponível apenas para a porta de destino PE i386 do vinculador. Símbolos explicitamente listados em um arquivo. def ainda são exportados, independentemente dessa opção. Ao criar um executável vinculado dinamicamente, usando a opção - E ou a opção --export-dynamic faz com que o vinculador adicione todos os símbolos à tabela de símbolos dinâmicos. A tabela de símbolos dinâmicos é o conjunto de símbolos visíveis a partir de objetos dinâmicos em tempo de execução. Se você não usar nenhuma dessas opções (ou usar a opção --no-export-dynamic para restaurar o comportamento padrã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 precise se referir aos símbolos definidos pelo programa, em vez de algum outro objeto dinâmico, então provavelmente você precisará usar essa opção ao vincular o próprio programa. Você também pode usar a lista dinâmica para controlar quais símbolos devem ser adicionados à tabela de símbolos dinâmicos se o formato de saída o suportar. Veja a descrição de --dynamic-list. Observe que essa opção é específica para portas segmentadas por ELF. Os destinos PE suportam uma função semelhante para exportar todos os símbolos de uma DLL ou EXE, veja a descrição de --export-all-symbols abaixo. Link objetos big-endian. Isso afeta o formato de saída padrão. Link objetos little-endian. Isso afeta o formato de saída padrão. Ao criar um objeto compartilhado ELF, defina o campo DTAUXILIARY interno para 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 nome do objeto compartilhado. Se você posteriormente vincular um programa com esse objeto de filtro, então, quando você executar o programa, o vinculador dinâmico verá o campo DTAUXILIARY. Se o vinculador dinâmico resolver quaisquer símbolos do objeto de filtro, ele primeiro verificará se há uma definição no nome do objeto compartilhado. Se houver um, ele será usado em vez da definição no objeto de filtro. O nome do objeto compartilhado não precisa existir. Assim, o nome do objeto compartilhado pode ser usado para fornecer uma implementação alternativa de certas funções, talvez para depuração ou para o desempenho específico da máquina. Esta opção pode ser especificada mais de uma vez. As entradas DTAUXILIARY serão criadas na ordem em que aparecem na linha de comando. Ao criar um objeto compartilhado ELF, defina o campo interno DTFILTER para 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 nome do objeto compartilhado. Se mais tarde ligar um programa a este objecto de filtro, em seguida, quando executa o programa, o vinculador dinâmico verá o campo DTFILTER. O vinculador dinâmico irá resolver os símbolos de acordo com a tabela de símbolos do objeto de filtro como de costume, mas ele realmente link para as definições encontradas no nome do objeto compartilhado. Assim, o objeto de filtro pode ser usado para selecionar um subconjunto dos símbolos fornecidos pelo nome do objeto. Alguns vinculadores mais antigos usaram a opção - F em toda uma cadeia de ferramentas de compilação para especificar o formato de arquivo de objeto para os arquivos de objetos de entrada e de saída. O linker GNU usa outros mecanismos para esta finalidade: o - b. --formato. --oformat opções, o comando TARGET em scripts linker, ea variável de ambiente GNUTARGET. O vinculador GNU ignorará a opção - F ao não criar um objeto compartilhado ELF. Ao criar um executável ELF ou objeto compartilhado, chame NAME quando o executável ou objeto compartilhado é descarregado, definindo DTFINI para o endereço da função. Por padrão, o vinculador usa fini como a função para chamar. Ignorado. Fornecido para a compatibilidade com outras ferramentas. Defina o tamanho máximo de objetos a serem otimizados usando o registro GP para tamanho. Isso é apenas significativo para formatos de arquivo de objeto, como MIPS ECOFF, que suporta colocar objetos grandes e pequenos em seções diferentes. Isso é ignorado para outros formatos de arquivo de objeto. Ao criar um objeto compartilhado ELF, defina o campo interno DTSONAME para o nome especificado. Quando um executável está vinculado a um objeto compartilhado que possui um campo DTSONAME, quando o executável for executado, o vinculador dinâmico tentará carregar o objeto compartilhado especificado pelo campo DTSONAME em vez de usar o nome do arquivo dado ao vinculador. Execute um link incremental (igual à opção - r). Ao criar um objeto ELF executável ou compartilhado, chame NAME quando o executável ou objeto compartilhado é carregado, definindo DTINIT para o endereço da função. Por padrão, o vinculador usa init como a função para chamar. Adicione o arquivo ou o arquivo de objeto especificado por namespec à lista de arquivos a vincular. Esta opção pode ser usada qualquer número de vezes. Se namespec é da forma: filename. Ld pesquisará o caminho da biblioteca para um arquivo chamado filename. Caso contrário, ele pesquisará o caminho da biblioteca para um arquivo chamado lib namespec. a. Em sistemas que suportam bibliotecas compartilhadas, ld também pode procurar por arquivos que não seja lib namespec. a. Especificamente, nos sistemas ELF e SunOS, o ld buscará um diretório para uma biblioteca chamada lib namespec. so antes de procurar um chamado lib namespec. a. Por convenção, uma extensão. so indica uma biblioteca compartilhada. Observe que esse comportamento não se aplica a: filename. Que sempre especifica um arquivo chamado filename. O vinculador pesquisará um arquivo somente uma vez, no local onde ele é especificado na linha de comando. Se o arquivo define um símbolo 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 para pesquisar o arquivo novamente. Veja a opçã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. Este tipo de pesquisa de arquivo é padrão para Unix vinculadores. No entanto, se você estiver usando ld on Note que ele é diferente do comportamento do linker AIX. Adicione o caminho searchdir à lista de caminhos que ld irá procurar por bibliotecas de arquivo e scripts de controle ld. Você pode usar esta opção qualquer número de vezes. Os diretórios são pesquisados ​​em A ordem na qual eles são especificados na linha de comando Os diretórios especificados na linha de comando são pesquisados ​​antes dos diretórios padrão Todas as opções - L se aplicam a todas as opções - l, independentemente da ordem em que as opções aparecem. Não afeta como ld procura um script linker a menos que a opção - T seja especificada. Se searchdir começa com, então o será substituído pelo prefixo sysroot, um caminho especificado quando o linker é configurado. O conjunto padrão de caminhos pesquisados ​​(sem bei Ng especificado com - L) depende do modo de emulação que o ld está usando e, em alguns casos, também de como ele foi configurado no momento da compilação. Os caminhos também podem ser especificados em um script de link com o comando SEARCHDIR. Os diretórios especificados desta maneira são pesquisados ​​no ponto em que o script de vinculador aparece na linha de comando. Emule o emulador de emulação. Você pode listar as emulações disponíveis com as opções --verbose ou - V. Se a opção - m não for utilizada, a emulação será retirada da variável de ambiente LDEMULATION, se for definida. Caso contrário, a emulação padrão depende de como o vinculador foi configurado. Imprima um mapa de link para a saída padrão. Um mapa de link fornece informações sobre o link, incluindo o seguinte: Onde os arquivos de objeto são mapeados na memória. Como símbolos comuns são alocados. Todos os membros do arquivo incluídos no link, com uma menção do símbolo que causou o membro do arquivo a ser trazido dentro. Os valores atribuídos aos símbolos. Nota: os símbolos cujos valores são calculados por uma expressão que envolve uma referência a um valor anterior do mesmo símbolo podem não ter o resultado correto exibido no mapa de link. Isso ocorre porque o vinculador descarta resultados intermediários e só retém o valor final de uma expressão. Em tais circunstâncias, o vinculador exibirá o valor final entre colchetes. Assim, por exemplo, um script linker contendo: irá produzir a seguinte saída no mapa de link se a opção - M for usada: Desativar o alinhamento de página de seções e desativar o vínculo contra bibliotecas compartilhadas. Se o formato de saída suporta números mágicos de estilo Unix, marque a saída como NMAGIC. Defina as seções de texto e dados para que possam ser lidas e graváveis. Além disso, não alinhe a página do segmento de dados e desative o link entre bibliotecas compartilhadas. Se o formato de saída suporta números mágicos de estilo Unix, marque a saída como OMAGIC. Observação: Embora uma seção de texto gravável seja permitida para destinos PE-COFF, ela não está de acordo com a especificação de formato publicada pela Microsoft. Esta opção anula a maioria dos efeitos da opção - N. Ele define a seção de texto para ser somente leitura, e força o segmento de dados para ser alinhados página. Nota - esta opção não permite o link entre bibliotecas compartilhadas. Use - Binâmica para isso. Use saída como o nome para o programa produzido por ld se essa 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. Se level for um valor numérico maior que zero ld otimiza a saída. Isso pode levar muito mais tempo e, portanto, provavelmente só deve ser ativado para o binário final. No momento em que esta opção afeta somente a geração de biblioteca compartilhada ELF. Futuras versões do vinculador podem fazer mais uso desta opção. Também atualmente não há nenhuma diferença no comportamento dos vinculadores para diferentes valores não nulos dessa opção. Novamente isso pode mudar com lançamentos futuros. Deixe secções e conteúdos de realocação em executáveis ​​totalmente ligados. Ferramentas de pós-análise e otimização de links podem precisar dessas informações para executar modificações corretas de executáveis. Isso resulta em executáveis ​​maiores. Esta opção é actualmente suportada apenas em plataformas ELF. Forçar o arquivo de saída para ter seções dinâmicas. Essa opção é específica para os destinos do VxWorks. Gerar saída relocável: ou seja, gerar um arquivo de saída que por sua vez pode servir como entrada para ld. Isso é muitas vezes chamado de ligação parcial. Como um efeito colateral, em ambientes que suportam números mágicos Unix padrão, essa opção também define o número mágico de arquivos de saída para OMAGIC. Se essa opção não for especificada, um arquivo absoluto será produzido. Ao vincular programas C, esta opção não resolverá referências a construtores para fazer isso, use - Ur. Quando um arquivo de entrada não tem o mesmo formato que o arquivo de saída, vinculação parcial só é suportada se esse arquivo de entrada não contém quaisquer deslocalizações. Diferentes formatos de saída podem ter restrições adicionais, por exemplo, alguns formatos baseados em a. out não suportam links parciais com arquivos de entrada em outros formatos. Esta opção faz a mesma coisa que - i. Leia os nomes dos símbolos e seus endereços a partir do nome do arquivo. Mas não realocá-lo ou incluí-lo na saída. Isso permite que o 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 vinculadores ELF, se a opção - R for seguida por um nome de diretório, em vez de um nome de arquivo, ele será tratado como a opção - rpath. Omitir todas as informações de símbolo do arquivo de saída. Use scriptfile como o script de vinculador. Esse script substitui o script de vinculação padrão do ld (em vez de adicionar a ele), então commandfile deve especificar tudo o necessário para descrever o arquivo de saída. Se scriptfile não existe no diretório atual, ld procura-lo nos diretórios especificados por qualquer precedente - L opções. Várias opções - T acumulam. Use scriptfile como o script de vinculador padrão. Esta opção é semelhante à opção --script, exceto que o processamento do script é adiado até que o resto da linha de comando tenha sido processado. Isso permite que as opções colocadas após a opção --default-script na linha de comando afetem o comportamento do script de vinculador, o que pode ser importante quando a linha de comando do vinculador não pode ser controlada diretamente pelo usuário. (Por exemplo, porque a linha de comando está sendo construída por outra ferramenta, como gcc). Força símbolo a ser inserido no arquivo de saída como um símbolo indefinido. Isso pode, por exemplo, ativar a vinculação de módulos adicionais de bibliotecas padrão. - u pode ser repetido com argumentos de opção diferentes para inserir símbolos adicionais indefinidos. Esta opção é equivalente ao comando de script de vinculador EXTERN. Para qualquer outra coisa que não programas C, esta opção é equivalente a - r. Gera uma saída relocável, isto é, um ficheiro de saída que pode por sua vez servir como entrada para ld. Ao ligar programas em C, - Ur resolve referências a construtores, ao contrário de - r. Ele não funciona para usar - Ur em arquivos que foram eles mesmos vinculados com - Ur uma vez que a tabela de construtor foi construída, ele não pode ser adicionado a. Use - Ur somente para o último link parcial e - r para os outros. Cria uma seção de saída separada para cada seção de seção de entrada correspondente, ou se o argumento opcional de seção de caractere curinga estiver faltando, para cada seção de entrada de órfão. Uma seção órfã não é especificamente mencionada em um script linker. Você pode usar esta opção várias vezes na linha de comando. Impede a fusão normal de seções de entrada com o mesmo nome, substituindo atribuições de seção de saída em um script de vinculador. Exibir o número da versão para ld. A opção - V também lista as emulações suportadas. Outras palavras-chave são ignoradas para compatibilidade com Solaris. --start-group archives --end-group Os arquivos devem ser uma lista de arquivos de arquivo. Eles podem ser nomes de arquivos explícitos ou opções - l. Os arquivos especificados são pesquisados ​​repetidamente até que nenhuma nova referência indefinida seja criada. Normalmente, um arquivo é pesquisado apenas uma vez na ordem em que é especificado na linha de comando. Se um símbolo nesse arquivo é necessário para resolver um símbolo indefinido referido por um objeto em um arquivo que aparece mais tarde na linha de comando, o vinculador não seria capaz de resolver essa referência. Agrupando os arquivos, todos eles serão pesquisados ​​repetidamente até que todas as referências possíveis sejam resolvidas. A utilização desta opção tem um custo de desempenho significativo. É melhor usá-lo somente quando houver referências circulares inevitáveis ​​entre dois ou mais arquivos. Diz ao vinculador para aceitar arquivos de entrada cuja arquitetura não pode ser reconhecida. A suposição é que o usuário sabe o que está fazendo e quer deliberadamente ligar nestes arquivos de entrada desconhecidos. Esse foi o comportamento padrão do vinculador, antes da versão 2.14. O comportamento padrão a partir da versão 2.14 em diante é rejeitar tais arquivos de entrada e, portanto, a opção --accept-unknown-input-arch foi adicionada para restaurar o comportamento antigo. Essa opção afeta as tags ELF DTNEEDED para bibliotecas dinâmicas mencionadas na linha de comando após a opção --a medida que ela for necessária. Normalmente, o vinculador adicionará uma marca DTNEEDED para cada biblioteca dinâmica mencionada na linha de comando, independentemente se a biblioteca é realmente necessária ou não. --a medida que faz com que uma marca DTNEEDED seja emitida apenas para uma biblioteca que satisfaça uma referência de símbolo indefinida a partir de um arquivo de objeto normal ou, se a biblioteca não for encontrada nas listas DTNEEDED de outras bibliotecas ligadas até esse ponto, Símbolo de outra biblioteca dinâmica. --no-as-needed restaura o comportamento padrão. Essas duas opções foram obsoletas devido à semelhança de seus nomes com as opções --as-needed e - no-as-needed. Eles foram substituídos por --copy-dt-needed-entries e --no-copy-dt-needed-entries. Esta opção é ignorada para compatibilidade SunOS. Link contra bibliotecas dinâmicas. Isso só é significativo em plataformas para as quais bibliotecas compartilhadas são suportadas. Esta opção é normalmente a predefinição em tais 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: afeta a biblioteca procurando por opções - l que a seguem. Defina o sinalizador DF1GROUP na entrada DTFLAGS1 na seção dinâmica. Isso faz com que o vinculador de tempo de execução para lidar com pesquisas neste objeto e suas dependências sejam executadas apenas dentro do grupo. --resolução de símbolos não resolvidos - tudo está implícito. Esta opção só é significativa nas plataformas ELF que suportam bibliotecas compartilhadas. Não vincule contra bibliotecas compartilhadas. Isso só é significativo em plataformas para as quais 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: afeta a biblioteca procurando por opções - l que a seguem. Esta opção também implica - não resolvido - symbolsreport-all. Esta opção pode ser usada com - shared. Isso significa que uma biblioteca compartilhada está sendo criada, mas que todas as referências externas das bibliotecas devem ser resolvidas puxando entradas de bibliotecas estáticas. Ao criar uma biblioteca compartilhada, vincular referências a símbolos globais para a 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 nas plataformas ELF que suportam bibliotecas compartilhadas. Ao criar uma biblioteca compartilhada, vincular referências a símbolos de funções globais para a definição dentro da biblioteca compartilhada, se houver. Esta opção só é significativa nas plataformas ELF que suportam bibliotecas compartilhadas. Especifique o nome de um arquivo de lista dinâmica para o vinculador. Isso é normalmente usado ao criar bibliotecas compartilhadas para especificar uma lista de símbolos globais cujas referências não devem ser vinculadas à definição dentro da biblioteca compartilhada ou criar executáveis ​​vinculados dinamicamente para especificar uma lista de símbolos que devem ser adicionados à tabela de símbolos no executável . Esta opção só é significativa nas plataformas ELF que suportam bibliotecas compartilhadas. O formato da lista dinâmica é o mesmo que o nó de versão sem escopo e nome de nó. Inclua todos os símbolos de dados globais na lista dinâmica. Forneça a lista dinâmica embutida para o operador C nova e apague. É principalmente útil para construir o libstdc compartilhado. Forneça a lista dinâmica embutida para a identificação do tipo de tempo de execução C. Solicita que o vinculador não verifique os endereços de seção depois de terem sido atribuídos para ver se há sobreposições. Normalmente, o vinculador executará essa verificação e, se encontrar alguma sobreposição, ele produzirá mensagens de erro adequadas. O linker sabe sobre e faz subsídios para seções em sobreposições. O comportamento padrão pode ser restaurado usando a opção de linha de comando --check-sections. Sobreposição de seções geralmente não é verificada para links relocáveis. Você pode forçar a verificação nesse caso usando a opção --check-sections. Essa opção afeta o tratamento das bibliotecas dinâmicas referidas pelas tags DTNEEDED dentro das bibliotecas dinâmicas ELF mencionadas na linha de comando. Normalmente, o linker não adicionará uma tag DTNEEDED ao binário de saída para cada biblioteca mencionada em uma tag DTNEEDED em uma biblioteca dinâmica de entrada. Com --copy-dt-needed-entradas especificadas na linha de comando, no entanto, qualquer bibliotecas dinâmicas que o seguem terão suas entradas DTNEEDED adicionadas. O comportamento padrão pode ser restaurado com --no-copy-dt-needed-entries. Esta opção também tem um efeito na resolução de símbolos em bibliotecas dinâmicas. Com --copy-dt-needed-entries bibliotecas dinâmicas mencionadas na linha de comando serão pesquisadas recursivamente, seguindo suas tags DTNEEDED para outras bibliotecas, a fim de resolver os símbolos exigidos pelo binário de saída. Com a configuração padrão, no entanto, a pesquisa de bibliotecas dinâmicas que o seguem irá parar com a própria biblioteca dinâmica. Nenhum link DTNEEDED será percorrido para resolver símbolos. Produz uma tabela de referência cruzada. Se um arquivo de mapa linker está sendo gerado, a tabela de referência cruzada é impressa no arquivo de mapa. Caso contrário, é impresso na saída padrão. O formato da tabela é intencionalmente simples, de modo que ele pode ser facilmente processado por um script, se necessário. Os símbolos são impressos, classificados por nome. Para cada símbolo, é fornecida uma lista de nomes de arquivo. If the symbol is defined, the first file listed is the location of the definition. The remaining files contain references to the symbol. This option inhibits the assignment of addresses to common symbols. The script command INHIBITCOMMONALLOCATION has the same effect. The --no-define-common option allows decoupling the decision to assign addresses to Common symbols from the choice of the output file type otherwise a non-Relocatable output type forces assigning addresses to Common symbols. Using --no-define-common allows Common symbols that are referenced from a shared library to be assigned addresses only in the main program. This eliminates the unused duplicate space in the shared library, and also prevents any possible confusion over resolving to the wrong duplicate when there are many dynamic modules with specialized search paths for runtime symbol resolution. Create a global symbol in the output file, containing the absolute address given by expression . You may use this option as many times as necessary to define multiple symbols in the command line. A limited form of arithmetic is supported for the expression in this context: you may give a hexadecimal constant or the name of an existing symbol, or use and - to add or subtract hexadecimal constants or symbols. If you need more elaborate expressions, consider using the linker command language from a script. Note: there should be no white space between symbol, the equals sign ( ), and expression . These options control whether to demangle symbol names in error messages and other output. When the linker is told to demangle, it tries to present symbol names in a readable fashion: it strips leading underscores if they are used by the object file format, and converts C mangled symbol names into user readable names. Different compilers have different mangling styles. The optional demangling style argument can be used to choose an appropriate demangling style for your compiler. The linker will demangle by default unless the environment variable COLLECTNODEMANGLE is set. These options may be used to override the default. Set the name of the dynamic linker. This is only meaningful when generating dynamically linked ELF executables. The default dynamic linker is normally correct dont use this unless you know what you are doing. Treat all warnings as errors. The default behaviour can be restored with the option --no-fatal-warnings . Make sure that an output file has a. exe suffix. If a successfully built fully linked output file does not have a. exe or. dll suffix, this option forces the linker to copy the output file to one of the same name with a. exe suffix. This option is useful when using unmodified Unix makefiles on a Microsoft Windows host, since some versions of Windows wont run an image unless it ends in a. exe suffix. Enable garbage collection of unused input sections. It is ignored on targets that do not support this option. The default behaviour (of not performing this garbage collection) can be restored by specifying --no-gc-sections on the command line. --gc-sections decides which input sections are used by examining symbols and relocations. The section containing the entry symbol and all sections containing symbols undefined on the command-line will be kept, as will sections containing symbols referenced by dynamic objects. Note that when building shared libraries, the linker must assume that any visible symbol is referenced. Once this initial set of sections has been determined, the linker recursively marks as used any section referenced by their relocations. See --entry and --undefined . This option can be set when doing a partial link (enabled with option - r ). In this case the root of symbols kept must be explicitly specified either by an --entry or --undefined option or by a ENTRY command in the linker script. List all sections removed by garbage collection. The listing is printed on stderr. This option is only effective if garbage collection has been enabled via the --gc-sections ) option. The default behaviour (of not listing the sections that are removed) can be restored by specifying --no-print-gc-sections on the command line. Print the name of the default output format (perhaps influenced by other command-line options). This is the string that would appear in an OUTPUTFORMAT linker script command. Print a summary of the command-line options on the standard output and exit. Report unresolved symbols that are contained in shared libraries, but ignore them if they come from regular object files. Report unresolved symbols that come from regular object files, but ignore them if they come from shared libraries. This can be useful when creating a dynamic binary and it is known that all the shared libraries that it should be referencing are included on the linkers command line. The behaviour for shared libraries on their own can also be controlled by the -- no - allow-shlib-undefined option. Normally the linker will generate an error message for each reported unresolved symbol but the option --warn-unresolved-symbols can change this to a warning. Display the version number for ld and list the linker emulations supported. Display which input files can and cannot be opened. Display the linker script being used by the linker. If the optional NUMBER argument gt 1 . plugin symbol status will also be displayed. Specify the name of a version script to the linker. This is typically used when creating shared libraries to specify additional information about the version hierarchy for the library being created. This option is only fully supported on ELF platforms which support shared libraries. It is partially supported on PE platforms, which can use version scripts to filter symbol visibility in auto-export mode: any symbols marked local in the version script will not be exported. Warn when a common symbol is combined with another common symbol or with a symbol definition. Unix linkers allow this somewhat sloppy practice, but linkers on some other operating systems do not. This option allows you to find potential problems from combining global symbols. Unfortunately, some C libraries use this practice, so you may get some warnings about symbols in the libraries as well as in your programs. There are three kinds of global symbols, illustrated here by C examples: A definition, which goes in the initialized data section of the output file. An undefined reference, which does not allocate space. There must be either a definition or a common symbol for the variable somewhere. A common symbol. If there are only (one or more) common symbols for a variable, it goes in the uninitialized data area of the output file. The linker merges multiple common symbols for the same variable into a single symbol. If they are of different sizes, it picks the largest size. The linker turns a common symbol into a declaration, if there is a definition of the same variable. The --warn-common option can produce five kinds of warnings. Each warning consists of a pair of lines: the first describes the symbol just encountered, and the second describes the previous symbol encountered with the same name. One or both of the two symbols will be a common symbol. 1. Turning a common symbol into a reference, because there is already a definition for the symbol. 2. Turning a common symbol into a reference, because a later definition for the symbol is encountered. This is the same as the previous case, except that the symbols are encountered in a different order. 3. Merging a common symbol with a previous same-sized common symbol. 4. Merging a common symbol with a previous larger common symbol. 5. Merging a common symbol with a previous smaller common symbol. This is the same as the previous case, except that the symbols are encountered in a different order. Warn if any global constructors are used. This is only useful for a few object file formats. For formats like COFF or ELF, the linker can not detect the use of global constructors. Warn if multiple global pointer values are required in the output file. This is only meaningful for certain processors, such as the DEC Alpha. Specifically, some processors put large-valued constants in a special section. A special register (the global pointer) points into the middle of this section, so that constants can be loaded efficiently via a base-register relative addressing mode. Since the offset in base-register relative mode is fixed and relatively small (e. g. 16 bits ), this limits the maximum size of the constant pool. Thus, in large programs, it is often necessary to use multiple global pointer values in order to be able to address all possible constants. This option causes a warning to be issued whenever this case occurs. Only warn once for each undefined symbol, rather than once per module which refers to it. Warn if the address of an output section is changed because of alignment. Typically, the alignment will be set by an input section. The address will only be changed if it not explicitly specified that is, if the SECTIONS command does not specify a start address for the section. Warn if the linker adds a DTTEXTREL to a shared object. The GNU linker ld is meant to cover a broad range of situations, and to be as compatible as possible with other linkers. As a result, you have many choices to control its behavior. Here is a summary of the options you can use on the ld command line: This plethora of command-line options may seem intimidating, but in actual practice few of them are used in any particular context. For instance, a frequent use of ld is to link standard Unix object files on a standard, supported Unix system. On such a system, to link a file hello. o. This tells ld to produce a file called output as the result of linking the file libcrt0.o with hello. o and the library libc. a. which will come from the standard search directories. (See the discussion of the - l option below.) The command-line options to ld may be specified in any order, and may be repeated at will. Repeating most options with a different argument will either have no further effect, or override prior occurrences (those further to the left on the command line) of that option. The exceptions--which may meaningfully be used more than once--are - A. - b (or its synonym - format ), - defsym. - L. - l. - R. - u. and -( (or its synonym --start-group ). The list of object files to be linked together, shown as objfile. may follow, precede, or be mixed in with command-line options, except that an objfile argument may not be placed between an option and its argument. Usually the linker is invoked with at least one object file, but you can specify other forms of binary input files using - l. - R. and the script command language. If no binary input files at all are specified, the linker does not produce any output, and issues the message No input files. If the linker can not recognize the format of an object file, it will assume that it is a linker script. A script specified in this way augments the main linker script used for the link (either the default linker script or the one specified by using - T ). This feature permits the linker to link against a file which appears to be an object or an archive, but actually merely defines some symbol values, or uses INPUT or GROUP to load other objects. See sec tion Command Language. For options whose names are a single letter, option arguments must either follow the option letter without intervening whitespace, or be given as separate arguments immediately following the option that requires them. For options whose names are multiple letters, either one dash or two can precede the option name for example, --oformat and - oformat are equivalent. Arguments to multiple-letter options must either be separated from the option name by an equals sign, or be given as separate arguments immediately following the option that requires them. For example, --oformat srec and --oformatsrec are equivalent. Unique abbreviations of the names of multiple-letter options are accepted. - b input-format ld may be configured to support more than one kind of object file. If your ld is configured this way, you can use the - b option to specify the binary format for input object files that follow this option on the command line. Even when ld is configured to support alternative object formats, you dont usually need to specify this, as ld should be configured to expect as a default input format the most usual format on each machine. input-format is a text string, the name of a particular format supported by the BFD libraries. (You can list the available binary formats with objdump - i .) - format input-format has the same effect, as does the script command TARGET. See section BFD. You may want to use this option if you are linking files with an unusual binary format. You can also use - b to switch formats explicitly (when linking object files of different formats), by including - b input-format before each group of object files in a particular format. The default format is taken from the environment variable GNUTARGET. You can also define the input format from a script, using the command TARGET see section Option Commands. - Bstatic Do not link against shared libraries. This is only meaningful on platforms for which shared libraries are supported. - Bdynamic Link against dynamic libraries. This is only meaningful on platforms for which shared libraries are supported. This option is normally the default on such platforms. - Bsymbolic When creating a shared library, bind references to global symbols to the definition within the shared library, if any. Normally, it is possible for a program linked against a shared library to override the definition within the shared library. This option is only meaningful on ELF platforms which support shared libraries. - c MRI-commandfile For compatibility with linkers produced by MRI, ld accepts script files written in an alternate, restricted command language, described in section MRI Compatible Script Files. Introduce MRI script files with the option - c use the - T option to run linker scripts written in the general-purpose ld scripting language. If MRI-cmdfile does not exist, ld looks for it in the directories specified by any - L options. - d - dc - dp These three options are equivalent multiple forms are supported for compatibility with other linkers. They assign space to common symbols even if a relocatable output file is specified (with - r ). The script command FORCECOMMONALLOCATION has the same effect. See section Option Commands. - defsym symbol expression Create a global symbol in the output file, containing the absolute address given by expression. You may use this option as many times as necessary to define multiple symbols in the command line. A limited form of arithmetic is supported for the expression in this context: you may give a hexadecimal constant or the name of an existing symbol, or use and - to add or subtract hexadecimal constants or symbols. If you need more elaborate expressions, consider using the linker command language from a script (see section Assignment: Defining Symbols ). Note: there should be no white space between symbol. the equals sign ( ), and expression. - embedded-relocs This option is only meaningful when linking MIPS embedded PIC code, generated by the - membedded-pic option to the GNU compiler and assembler. It causes the linker to create a table which may be used at runtime to relocate any data which was statically initialized to pointer values. See the code in testsuiteld-empic for details. - e entry Use entry as the explicit symbol for beginning execution of your program, rather than the default entry point. See section The Entry Point. for a discussion of defaults and other ways of specifying the entry point. - F - F format Ignored. Some older linkers used this option throughout a compilation toolchain for specifying object-file format for both input and output object files. The mechanisms ld uses for this purpose (the - b or - format options for input files, - oformat option or the TARGET command in linker scripts for output files, the GNUTARGET environment variable) are more flexible, but ld accepts the - F option for compatibility with scripts written to call the old linker. - format input-format Synonym for - b input-format . - g Ignored. Provided for compatibility with other tools. - G value - G value Set the maximum size of objects to be optimized using the GP register to size under MIPS ECOFF. Ignored for other object file formats. - help Print a summary of the command-line options on the standard output and exit. - i Perform an incremental link (same as option - r ). - l ar Add archive file archive to the list of files to link. This option may be used any number of times. ld will search its path-list for occurrences of lib ar. a for every archive specified. - L searchdir - L searchdir Add path searchdir to the list of paths that ld will search for archive libraries and ld control scripts. You may use this option any number of times. The directories are searched in the order in which they are specified on the command line. Directories specified on the command line are searched before the default directories. All - L options apply to all - l options, regardless of the order in which the options appear. The paths can also be specified in a link script with the SEARCHDIR command. Directories specified this way are searched at the point in which the linker script appears in the command line. - M Print (to the standard output) a link map--diagnostic information about where symbols are mapped by ld. and information on global common storage allocation. - Map mapfile Print to the file mapfile a link map--diagnostic information about where symbols are mapped by ld. and information on global common storage allocation. - m emulation - m emulation Emulate the emulation linker. You can list the available emulations with the --verbose or - V options. The default depends on how your ld was configured. - N Set the text and data sections to be readable and writable. Also, do not page-align the data segment. If the output format supports Unix style magic numbers, mark the output as OMAGIC. - n Set the text segment to be read only, and mark the output as NMAGIC if possible. - noinhibit-exec Retain the executable output file whenever it is still usable. Normally, the linker will not produce an output file if it encounters errors during the link process it exits without writing an output file when it issues any error whatsoever. - no-keep-memory ld normally optimizes for speed over memory usage by caching the symbol tables of input files in memory. This option tells ld to instead optimize for memory usage, by rereading the symbol tables as necessary. This may be required if ld runs out of memory space while linking a large executable. - o output Use output as the name for the program produced by ld if this option is not specified, the name a. out is used by default. The script command OUTPUT can also specify the output file name. - oformat output-format ld may be configured to support more than one kind of object file. If your ld is configured this way, you can use the - oformat option to specify the binary format for the output object file. Even when ld is configured to support alternative object formats, you dont usually need to specify this, as ld should be configured to produce as a default output format the most usual format on each machine. output-format is a text string, the name of a particular format supported by the BFD libraries. (You can list the available binary formats with objdump - i .) The script command OUTPUTFORMAT can also specify the output format, but this option overrides it. See section BFD. - R filename Read symbol names and their addresses from filename. but do not relocate it or include it in the output. This allows your output file to refer symbolically to absolute locations of memory defined in other programs. - relax An option with machine dependent effects. On some platforms, the - relax option performs global optimizations that become possible when the linker resolves addressing in the program, such as relaxing address modes and synthesizing new instructions in the output object file. - retain-symbols-file filename Retain only the symbols listed in the file filename. discarding all others. filename is simply a flat file, with one symbol name per line. This option is especially useful in environments where a large global symbol table is accumulated gradually, to conserve run-time memory. - retain-symbols-file does not discard undefined symbols, or symbols needed for relocations. You may only specify - retain-symbols-file once in the command line. It overrides - s and - S. - r Generate relocatable output--i. e. generate an output file that can in turn serve as input to ld. This is often called partial linking . As a side effect, in environments that support standard Unix magic numbers, this option also sets the output files magic number to OMAGIC. If this option is not specified, an absolute file is produced. When linking C programs, this option will not resolve references to constructors to do that, use - Ur. This option does the same thing as - i. - S Omit debugger symbol information (but not all symbols) from the output file. - s Omit all symbol information from the output file. - shared Create a shared library. This is currently only supported on ELF and SunOS platforms. On SunOS, the linker will automatically create a shared library if the - e option is not used and there are undefined symbols in the link. - sort-common Normally, when ld places the global common symbols in the appropriate output sections, it sorts them by size. First come all the one byte symbols, then all the two bytes, then all the four bytes, and then everything else. This is to prevent gaps between symbols due to alignment constraints. This option disables that sorting. - split-by-reloc count Trys to creates extra sections in the output file so that no single output section in the file contains more than count relocations. This is useful when generating huge relocatable for downloading into certain real time kernels with the COFF object file format since COFF cannot represent more than 65535 relocations in a single section. Note that this will fail to work with object file formats which do not support arbitrary sections. The linker will not split up individual input sections for redistribution, so if a single input section contains more than count relocations one output section will contain that many relocations. - split-by-file Similar to - split-by-reloc but creates a new output section for each input file. - stats Compute and display statistics about the operation of the linker, such as execution time and memory usage. - Tbss org - Tdata org - Ttext org Use org as the starting address for--respectively--the bss. dados. or the text segment of the output file. org must be a single hexadecimal integer for compatibility with other linkers, you may omit the leading 0x usually associated with hexadecimal values. - T commandfile - T commandfile Read link commands from the file commandfile. These commands replace ld s default link script (rather than adding to it), so commandfile must specify everything necessary to describe the target format. See section Command Language. If commandfile does not exist, ld looks for it in the directories specified by any preceding - L options. Multiple - T options accumulate. - t Print the names of the input files as ld processes them. - traditional-format For some targets, the output of ld is different in some ways from the output of some existing linker. This switch requests ld to use the traditional format instead. For example, on SunOS, ld combines duplicate entries in the symbol string table. This can reduce the size of an output file with full debugging information by over 30 percent. Unfortunately, the SunOS dbx program can not read the resulting program ( gdb has no trouble). The - traditional-format switch tells ld to not combine duplicate entries. - u symbol Force symbol to be entered in the output file as an undefined symbol. Doing this may, for example, trigger linking of additional modules from standard libraries. - u may be repeated with different option arguments to enter additional undefined symbols. - Ur For anything other than C programs, this option is equivalent to - r. it generates relocatable output--i. e. an output file that can in turn serve as input to ld. When linking C programs, - Ur does resolve references to constructors, unlike - r. It does not work to use - Ur on files that were themselves linked with - Ur once the constructor table has been built, it cannot be added to. Use - Ur only for the last partial link, and - r for the others. --verbose Display the version number for ld and list the linker emulations supported. Display which input files can and cannot be opened. - v - V Display the version number for ld. The - V option also lists the supported emulations. - version Display the version number for ld and exit. - warn-common Warn when a common symbol is combined with another common symbol or with a symbol definition. Unix linkers allow this somewhat sloppy practice, but linkers on some other operating systems do not. This option allows you to find potential problems from combining global symbols. Unfortunately, some C libraries use this practice, so you may get some warnings about symbols in the libraries as well as in your programs. There are three kinds of global symbols, illustrated here by C examples: int i 1 A definition, which goes in the initialized data section of the output file. extern int i An undefined reference, which does not allocate space. There must be either a definition or a common symbol for the variable somewhere. int i A common symbol. If there are only (one or more) common symbols for a variable, it goes in the uninitialized data area of the output file. The linker merges multiple common symbols for the same variable into a single symbol. If they are of different sizes, it picks the largest size. The linker turns a common symbol into a declaration, if there is a definition of the same variable. The - warn-common option can produce five kinds of warnings. Each warning consists of a pair of lines: the first describes the symbol just encountered, and the second describes the previous symbol encountered with the same name. One or both of the two symbols will be a common symbol. Turning a common symbol into a reference, because there is already a definition for the symbol. Turning a common symbol into a reference, because a later definition for the symbol is encountered. This is the same as the previous case, except that the symbols are encountered in a different order. Merging a common symbol with a previous same-sized common symbol. Merging a common symbol with a previous larger common symbol. Merging a common symbol with a previous smaller common symbol. This is the same as the previous case, except that the symbols are encountered in a different order. - warn-constructors Warn if any global constructors are used. This is only useful for a few object file formats. For formats like COFF or ELF, the linker can not detect the use of global constructors. - warn-once Only warn once for each undefined symbol, rather than once per module which refers to it. For each archive mentioned on the command line, include every object file in the archive in the link, rather than searching the archive for the required object files. This is normally used to turn an archive file into a shared library, forcing every object to be included in the resulting shared library. - X Delete all temporary local symbols. For most targets, this is all local symbols whose names begin with L. - x Delete all local symbols. - y symbol Print the name of each linked file in which symbol appears. This option may be given any number of times. On many systems it is necessary to prepend an underscore. This option is useful when you have an undefined symbol in your link but dont know where the reference is coming from. -( archives -) --start-group archives --end-group The archives should be a list of archive files. They may be either explicit file names, or - l options. The specified archives are searched repeatedly until no new undefined references are created. Normally, an archive is searched only once in the order that it is specified on the command line. If a symbol in that archive is needed to resolve an undefined symbol referred to by an object in an archive that appears later on the command line, the linker would not be able to resolve that reference. By grouping the archives, they all be searched repeatedly until all possible references are resolved. Using this option has a significant performance cost. It is best to use it only when there are unavoidable circular references between two or more archives. Go to the first. previous. Próximo. last section, table of contents.

No comments:

Post a Comment