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 / ubuntu / Perguntas / 1388695
Accepted
Mohamed Elleuch
Mohamed Elleuch
Asked: 2022-01-23 18:24:57 +0800 CST2022-01-23 18:24:57 +0800 CST 2022-01-23 18:24:57 +0800 CST

Outro nenhum tal arquivo ou diretório? Mas o arquivo existe!

  • 772

estou enfrentando um problema que consumiu muito do meu dente. Estou tentando vincular meu arquivo de objeto (pequeno programa compilado com nasm) com o vinculador ld e usando funções c. Pesquisei muito e descobri que a solução para carregar todas as c libs é passar -lc como opção para ld que honestamente silenciou todos os avisos e erros e gerou meu executável. O problema é que sempre recebo o erro "Nenhum arquivo ou diretório" quando tento executar meu programa.

Pesquisei muito na internet e encontrei esta resposta útil Ask Ubuntu Answer , mas infelizmente isso não resolveu meu problema.

algumas informações aqui:

> file main

returned:

main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld64.so.1, not stripped

A versão do programa é de 64 bits e o interpretador existe de acordo com o "comando do arquivo.

> ldd main

returned:

linux-vdso.so.1 (0x00007ffdf4bcc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7a10b23000)
/lib/ld64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x00007f7a10f14000)

De acordo com o comando "ldd", não há biblioteca compartilhada ausente

NB: O mesmo programa compilou e vinculou com sucesso com nasm e ld no macosx adicionando essas opções

-macosx_version_min 11.0 -L /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib -lSystem -no_pie

para o linker ld.

EDIT1: O programa vinculado funciona sem nenhum problema quando eu removo o -lc para ld e, claro, as chamadas de funções c dentro do meu arquivo asm

EDIT2:

readelf -h main

returned:

ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x4005d0
  Start of program headers:          64 (bytes into file)
  Start of section headers:          19096 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         7
  Size of section headers:           64 (bytes)
  Number of section headers:         21
  Section header string table index: 20

Algumas informações extras sobre o programa

64-bit
  • 1 1 respostas
  • 2693 Views

1 respostas

  • Voted
  1. Best Answer
    Mohamed Elleuch
    2022-01-23T19:23:52+08:002022-01-23T19:23:52+08:00

    Graças a este homem que compartilhou sua experiência com outras soluções aqui . graças a ele consegui resolver este problema.

    Para resumir, como @steeldriver, havia um problema de intérprete. o linker está dando ao meu programa [/lib/ld64.so.1] como interpretador ELF, mas esse caminho não existe e eu o verifiquei:

    > ls /lib/ld64.so.1
    ls: cannot access '/lib/ld64.so.1': No such file or directory
    

    Depois disso, verifiquei o caminho dos intérpretes na minha instalação do Ubuntu:

    > ls /lib64/ld-*
    /lib64/ld-linux-x86-64.so.2  /lib64/ld-lsb-x86-64.so.2  /lib64/ld-lsb-x86-64.so.3
    

    então a solução é criar um link de um desses interpretadores para o caminho do interpretador inexistente por:

    sudo ln -s /lib64/ld-linux-x86-64.so.2 /lib/ld64.so.1
    

    Agora verificamos novamente o interpretador inexistente mais uma vez para ver se ele ainda não existe ou não:

    > ls /lib/ld64.so.1
    /lib/ld64.so.1
    

    Agora este comando retornou /lib/ld64.so.1 em vez de "arquivo inexistente". então o problema foi resolvido e eu pude executar ./main com sucesso

    • 2

relate perguntas

Sidebar

Stats

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

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

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