dyld: Biblioteca não carregada… Motivo: Imagem não encontrada


293

Ao tentar executar um executável, fui enviado no Mac OS X, recebo o seguinte erro

dyld: Library not loaded: libboost_atomic.dylib
  Referenced from: /Users/"Directory my executable is in"
  Reason: image not found
Trace/BPT trap:5

Instalei as bibliotecas de reforço e elas estão localizadas em /opt/local/lib. Eu acho que o problema tem algo a ver com o executável olhando apenas no diretório em que está, como quando colo o 'libboost_atomic.dylib' lá, ele não se importa mais com isso. Infelizmente, ele reclama que não conseguiu encontrar a próxima biblioteca de impulso.

Existe uma maneira fácil de corrigir isso?


Se você tem ainda método de utilização problema a partir deste tópico
Tarik

Respostas:


171

Encontre todas as bibliotecas de reforço:

$ otool -L exefile
exefile:
        @executable_path/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

e para cada um libboost_xxx.dylib, faça:

$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile

e finalmente verifique usando otoolnovamente:

$ otool -L exefile
exefile:
        /opt/local/lib/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

Manpages: otool install_name_tool

EDITAR Há um tempo atrás, escrevi um script python ( copy_dylibs.py) para resolver todas essas coisas automaticamente ao criar um aplicativo. Ele empacotará todas as bibliotecas do /usr/localou /opt/localno pacote de aplicativos e corrigirá as referências a essas bibliotecas a serem usadas @rpath. Isso significa que você pode instalar facilmente uma biblioteca de terceiros usando o Homebrew e empacotá-las com a mesma facilidade.

Agora tornei este script público no github .


4
@trojanfoe, por favor, explique aqui qual é o exefile que é um caminho de arquivo exec da ferramenta? não é?
VenushkaT

1
Depois de recompilar o executável, tenho que repetir esse processo - bastante irritante durante o desenvolvimento.
tglas 14/09

2
Na verdade, a melhor maneira é usar DYLD_LIBRARY_PATHpara modificar o caminho da pesquisa. A outra resposta conseguiu isso.
27418 frankliuao

18
'exefile': Nenhum tal lima ou diretório
ScottyBlades

2
@ScottyBlades exefilerepresenta o arquivo executável que você está tentando executar. No meu caso, otool -L /usr/local/bin/phpfiz o truque.
Brunouno

106

Na Generalguia do alvo , há uma seção chamadaFrameworks, Libraries, and Embedded Content

Clique no +sinal, adicione o necessário frameworke a falha será resolvida.

Atualizar a captura de tela mais recente do xcode


2
o que devo adicionar? há muitos arquivos
Joe Sleiman

@ Himanshu Tenho libcppreset para o meu projeto! ele tem muita dependência do boost e ... Eu corro um script bash para alterá-los com install_name_tool, mas para o que LC_ID_DYLIBeu não preciso fazer um link simbólico em usr / loca / opt! existe alguma maneira de descobrir? : | É doloroso :(
Mo Farhand 26/03

85

Isso funcionou para mim:

brew upgrade node

7
O que isso está fazendo?
diegoaguilar

3
@diegoaguilar esta reinstalando nodeusando homebrew. Provavelmente outra instalação quebrou o caminho do nó. Também funcionou para mim.
Hugo Nogueira

68

Após a atualização do Mac OS para o Mojave. Eu tentei instalar os módulos npm via yarncomando, obtive um erro:

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.60.dylib
  Referenced from: /usr/local/bin/node
  Reason: image not found
Abort trap: 6

Foi corrigido com:

brew update
brew upgrade

2
Meu intelliJ começou a gerar esse erro quando atualizei recentemente o xcode. Eu estava tentando executar um servidor node.js. através do intellij. Eu não tinha certeza do que deu errado. A execução node --versionno meu sistema resultou no mesmo erro. A execução dos dois comandos acima resolveu meu problema.
Ishan

3
No meu caso, também executei o brew cleanupcomando, o que é bom de fazer às vezes, se você quiser se livrar das versões antigas.
Michael Behrens

Em relação ao comentário de @ MichaelBehrens, eu corro brew cleanupentão ele corrigiu.
Buraco

37

Para alguns, isso pode ser tão fácil quanto definir o caminho do sistema para bibliotecas dinâmicas. No OS X, isso é tão simples quanto definir a DYLD_LIBRARY_PATHvariável de ambiente. Vejo:

Posso usar DYLD_LIBRARY_PATH no Mac OS X? E qual é o algoritmo de pesquisa dinâmica de bibliotecas?


Pode parecer estúpido, mas me pergunto que valor devo definir DYLD_LIBRARY_PATH?
César

1
@Caesar Defina-o no diretório onde quer que os dylibs que você está tentando vincular estejam localizados.
markshiz

Você não pode esperar que seus usuários mudem DYLD_LIBRARY_PATH. A solução correta é incluir bibliotecas não padrão .appe o usuário não precisará fazer nada. O desenvolvedor, no entanto, ainda pode ter que hackear o caminho do carregador conforme minha resposta.
Trojanfoe

12

Eu recebi esse erro quando tentei instalar o ruby ​​2.3.1 usando o rvm. Primeiro ele me disse para executar brew update, o que eu fiz e, quando tentei rvm install ruby-2.3.1, recebi o erro nesta pergunta SO.

A correção foi executada primeiro brew upgrade, aparentemente de acordo com esta pergunta do superuser.com, você precisa fazer as duas coisas brew update&& brew upgrade. Feito isso, finalmente pude instalar o ruby ​​2.3.1.


As pessoas precisam parar de recomendar fazer brew upgradeexatamente assim. Isso pode ser um grande transtorno para todo o sistema. Em vez disso, isole o que precisa ser atualizado e atualize somente isso.
Jivan 12/04

7

Você pode usar o comando otool com a opção -L para o executável, que exibirá onde o executável espera que essas bibliotecas estejam.

Se o caminho para esses precisar mudar, use o comando install_name_tool , que permite definir o caminho para as bibliotecas.


7

Agora que o Xcode atualizou seu IDE, eles mudaram um pouco como isso funciona.

Costumava ser dividido em seção separada, como demonstrado acima, com 'Binários incorporados' e 'Frameworks e bibliotecas vinculadas' como seções separadas.

Agora, é uma seção combinada com menus suspensos à direita sobre o que deve ser incorporado.

Novas alterações de IDE

Isso foi confuso para mim no começo, mas agora faz todo o sentido.


5

Cheguei aqui tentando executar um programa que acabei de compilar usando o CMake. Quando tento executá-lo, ele reclama dizendo:

dyld: Library not loaded: libboost_system.dylib
  Referenced from: /Users/path/to/my/executable
  Reason: image not found

Eu contornei o problema dizendo ao CMake para usar a versão estática do Boost, em vez de deixá-lo usar a dinâmica:

set(Boost_USE_STATIC_LIBS ON)

5

Se você estiver usando o Xcode 11 em diante:

Vá para a Generalguia e adicione a estrutura na Frameworks, Libraries, and Embedded Contentseção.

Importante: Por padrão, pode ser marcado como Do Not Embed, altere-o para o Embed Without Signingmostrado na imagem e você estará pronto.

insira a descrição da imagem aqui

Para versões do Xcode abaixo de 11:

Basta adicionar a estrutura na Embedded Binariesseção e pronto.

Felicidades!


5

Para resolver o erro abaixo no meu Macbook Catalina 10.15.4:

dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
    Referenced from: /usr/local/bin/mongoexport
    Reason: image not found
Abort trap: 6

Executei o comando abaixo e contornei o problema acima:

brew switch openssl 1.0.2s

3

Corrigi esse problema usando Product > Clean Build Folder( CommandShiftK), o que torna uma nova compilação limpa, realmente estranha.


2

Você pode usar o sudo install_name_tool -changecaminho de sudo install_name_tool -idalteração do dylib E alterar o nome do dylib



2

Se você usar o cmake, adicione DYLIB_INSTALL_NAME_BASE "@rpath"às propriedades de destino:

set_target_properties(target_dyLib PROPERTIES
        # # for FRAMEWORK begin
        # FRAMEWORK TRUE
        # FRAMEWORK_VERSION C
        # MACOSX_FRAMEWORK_IDENTIFIER com.cmake.targetname
        # MACOSX_FRAMEWORK_INFO_PLIST ./Info.plist
        # PUBLIC_HEADER targetname.h
        # # for FRAMEWORK end
        IPHONEOS_DEPLOYMENT_TARGET "8.0"
        DYLIB_INSTALL_NAME_BASE "@rpath" # this is the key point
        XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
        DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}"
    )

ou no projeto da biblioteca dinâmica do Xcode, Destino -> Configuração da Construção, defina a Base de Nomes de Instalação da Biblioteca Dinâmica como @rpath


Eu crio um projeto de biblioteca dinâmica de estrutura de cacau, ele funciona e, comparado ao meu projeto gerado incorretamente pelo cmake, acho isso diferente e o corrigi, ele funciona no iOS.
cn00 27/02/19

2

se você usar o virtualenv, remova a pasta do seu ambiente e recrie-a com este comando virtualenv --python=/usr/local/bin/python3 the_name_of_my_env


1

Para quem vem a esta página porque recebeu esse erro ao tentar vincular uma estrutura de terceiros ao seu projeto usando o Xcode 6.3.1, o problema foi o de que a biblioteca estava sendo criada com uma versão mais antiga do compilador, usando uma versão diferente de rápido. A única maneira de corrigir isso para mim era reconstruir a estrutura.

Outro motivo para você conseguir isso é declarado em um documento técnico da Apple.

Se você estiver criando um aplicativo que não usa o Swift, mas incorpora conteúdo como uma estrutura, o Xcode não incluirá essas bibliotecas no seu aplicativo. Como resultado, seu aplicativo falhará ao ser iniciado com uma mensagem de erro com a seguinte aparência:

defina a configuração de compilação Conteúdo incorporado contém código Swift (EMBEDDED_CONTENT_CONTAINS_SWIFT) como YES no seu aplicativo

Aqui está o link para o documento completo da Apple que explica aqui


1

Para o meu framework, eu estava usando um subprojeto Xcode adicionado como um submódulo git.

Acredito que estava recebendo esse erro porque estava assinando a estrutura com uma equipe de assinatura diferente do meu aplicativo principal. (equipes trocadas por aplicativo; esqueceram de alternar para estrutura)

A solução é não assinar dentro do projeto de estrutura. Em vez disso, na Target > General > Frameworks, Libraries, and Embedded Contentseção do aplicativo principal , assine a estrutura viaEmbed & Sign .

Se eu selecionar Do not Embedou Embed Without Signing, em vez disso, receber o erro:

FRAMEWORK inválido para uso em processo usando a Validação de Biblioteca: o arquivo mapeado não possui cdhash, completamente sem sinal? O código deve ser assinado pelo menos ad-hoc.


1

Xcode 11.1 e Swift 5.1

Conserto rápido

Primeiro, verifique se a biblioteca adicionada externa tem a opção incorporar está selecionada na guia Geral, Binários incorporados.

Se ainda não funcionar ..

Isso acontece porque você tem versões diferentes e inigualáveis ​​de bibliotecas presentes.

Atualize os pods

pod update

Importante: Verifique se todas as bibliotecas estão incluídas na lista Configurações de Construção -> bibliotecas e estruturas e você deu a opção de incorporar na construção

Apenas trabalhando incrível


0

Para quem experimenta a mesma coisa com uma biblioteca ou pacote diferente, @ user3835452 está no caminho certo. Encontrei esta mensagem ao tentar executar composer:

dyld: Library not loaded: /usr/local/opt/openldap/lib/libldap-2.4.2.dylib
  Referenced from: /usr/local/opt/php@7.1/bin/php
  Reason: image not found
Abort trap: 6

Depois de tentar várias maneiras diferentes, eu apenas corri brew install openldape o consertei. Observe que eu já havia executado brew updatee, brew upgradesomente depois que instalei manualmente openldap, funcionou.


0

Corrigi isso reinstalando o Homebrew

Desinstalar

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

Instalar

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


0

Existe uma maneira fácil de corrigir isso?

Eu apenas usei brew upgrade <the tool>. No meu caso brew upgrade tmux.


0

Se a resposta ajudou de alguma forma, por favor, marque como resposta, caso a sua dúvida não tenha sido solucionada, por favor, poste novamente.

Isso foi visto no Xcode 9.3. A razão pela qual descobri que o Xcode não está pegando bibliotecas dinamicamente, então tive que fazer isso manualmente, o que resolveu meu problema de travamento.

Siga os passos abaixo:

  1. Ir para Construir Fases
  2. Clique no botão '+' na parte superior e selecione "Nova fase do arquivo de cópia"
  3. Selecione Destino como estruturas e pressione o botão '+' abaixo para adicionar arquivos.
  4. Selecione Adicionar outro abaixo, clique em CMD + SHIFT + G e cole o caminho abaixo, /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos

Agora você poderá ver alguns dylibs rápidos, selecione todas as bibliotecas rápidas com a extensão .dylib e clique em abrir.

Eles serão adicionados aos binários incorporados na guia geral do aplicativo.

Crie um novo grupo na pasta do projeto e adicione todas essas bibliotecas.

Agora execute seu aplicativo.


0

Se você estiver usando o ambiente Conda no terminal, atualize as samtools para resolvê-lo.

conda install -c bioconda samtools


0

O melhor é respondido acima, primeiro verifique qual é a saída de

otool -L

E faça o seguinte, se incorreto

set_target_properties(
    MyTarget
    PROPERTIES
    XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS
    "@executable_path/Frameworks @loader_path/Frameworks"
)

E

set_target_properties(
        MyTarget
        PROPERTIES
        XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE 
        "@rpath"


-1

Nenhuma das opções acima funcionou para mim, mas brew reinstall icu4cfuncionou.


-1

Para qualquer um que ainda esteja com esse problema:

Esse é um problema contínuo do lado da Apple, e o que funcionou para mim foi a atualização para o ios 13.4 (beta). Instalei isso e funcionou como um encanto.


este não é um problema do IOS.
JBarros35 10/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.