AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 790991
Accepted
Vinod
Vinod
Asked: 2025-02-13 09:51:49 +0800 CST2025-02-13 09:51:49 +0800 CST 2025-02-13 09:51:49 +0800 CST

cc/gcc -R sinalizador para vinculador

  • 772

Referência: Símbolo fraco

No link é mencionada a seguinte opção de vinculador:

cc  main.o -L`pwd` -Wl,-R`pwd` -lpowerslow -o main2

O propósito de todas as sinalizações acima foi documentado no Manual do GCC, exceto -R.

O que esse sinalizador instrui o vinculador?

AIT

Vinod

gcc
  • 2 2 respostas
  • 25 Views

2 respostas

  • Voted
  1. Best Answer
    telcoM
    2025-02-13T13:53:29+08:002025-02-13T13:53:29+08:00

    Para o GCC, esta é apenas uma opção, não duas:

    -Wl,-R`pwd` 
    

    A -Wl,<something>construção é usada para passar a <something>parte como opção(ões) para o vinculador ( ld). Neste caso, ele diz gccpara invocar ldcomo:

    ld -R`pwd` <other parameters...>
    

    E se você olhar man ldno Linux, você encontrará (ênfase minha):

    -R filename

    [...]

    Leia nomes de símbolos e seus endereços de filename, mas não o reposicione ou inclua na saída. Isso permite que seu arquivo de saída se refira simbolicamente a localizações absolutas de memória definidas em outros programas. Você pode usar esta opção mais de uma vez.

    Para compatibilidade com outros vinculadores ELF, se a -Ropção for seguida por um nome de diretório, em vez de um nome de arquivo, ela será tratada como a -rpathopção.

    E a -rpathopção é:

    -rpath=dir

    Adicione um diretório ao caminho de pesquisa da biblioteca de tempo de execução. Isso é usado ao vincular um executável ELF com objetos compartilhados. Todos -rpathos argumentos são concatenados e passados ​​para o vinculador de tempo de execução, que os usa para localizar objetos compartilhados em tempo de execução. [...]

    Portanto, toda a construção significa "dizer ao vinculador de tempo de execução para pesquisar objetos compartilhados para vinculação no diretório de trabalho atual".

    A ldpágina do manual também observa:

    A -rpathopção também pode ser usada no SunOS. Por padrão, no SunOS, o vinculador formará um caminho de pesquisa em tempo de execução a partir de todas as -Lopções que lhe são dadas. Se uma -rpathopção for usada, o caminho de pesquisa em tempo de execução será formado exclusivamente usando as -rpathopções, ignorando as -Lopções. Isso pode ser útil ao usar o gcc, que adiciona muitas -Lopções que podem estar em sistemas de arquivos montados em NFS.

    Portanto, o objetivo geral para esta construção de opção, por exemplo

    cc -g -c -o main.o main.c
    cc -g -fpic -c -o power_slow.po power_slow.c
    cc -shared -fpic -o libpowerslow.so power_slow.po
    cc  main.o -L`pwd` -Wl,-R`pwd` -lpowerslow -o main
    

    é garantir que o mainbinário resultante pesquisará libpowerslow.soapenas no diretório de trabalho atual, de modo que ele escolherá a versão exata compilada pelo terceiro comando, e não qualquer outra versão libpowerslow.soque possa existir em outro lugar no sistema.

    Você deve perceber que, embora "assar" o diretório de trabalho atual seja útil com binários de exemplo de curta duração, como o criado aqui, você deve especificar outra coisa como o caminho de pesquisa da biblioteca de tempo de execução ao criar algo a ser instalado para uso em todo o sistema.

    • 2
  2. icarus
    2025-02-13T13:53:12+08:002025-02-13T13:53:12+08:00

    Da ldpágina do manual

    -R filename
    --just-symbols=filename
    .....
    For compatibility with other ELF linkers, if the -R option is followed by a directory name, rather than a file name, it is treated as the -rpath option.
    

    Isso significa que o executável adicionará o diretório atual à lista de locais onde o vinculador de tempo de execução procurará por bibliotecas compartilhadas, o que o ajudará a localizar a powerslowbiblioteca.

    Seria menos confuso de usar -rpathdo que -R.

    • 0

relate perguntas

  • ./configure não consegue encontrar o GCC, mas onde é capaz?

  • gcc /usr/bin/ld: não foi possível encontrar -lglut32, -lopengl32, -lglu32, -lfreegut, mas estes estão instalados

  • Como desabilito o g ++ exibindo notas para erros?

  • Quanto tempo leva para compilar o gcc 7.3.0? [fechado]

  • Obter saída somente hexadecimal do objdump

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve