Onde eu configuro DYLD_LIBRARY_PATH no Mac OS X, e é uma boa ideia?

25

Estou tentando instalar um solver escrito em C ++ no meu Mac (OS X), para uso com o código que escrevi no XCode.

A documentação do solver diz isso:

Be sure to have "." in your DYLD_LIBRARY_PATH in order to

  • run the ready-built executables
  • link with the libamg.dylib (and the gfortran RTSlibs)

Eu realmente não entendo o que isso significa. Onde e o que eu preciso mudar o que?

Eu fiz alguns googling, mas não encontrei nada que seja simples o suficiente para um novato como eu! Se houver algum paciente lá fora que não se importe em me direcionar para um recurso online ou me fornecer os a-b-cs de como e onde definir variáveis de ambiente, eu ficaria muito grato.

    
por Ant 12.05.2011 / 09:24

3 respostas

18

É uma variável de ambiente e, como tal, é normalmente definida no Terminal por

export DYLD_LIBRARY_PATH=someValue

man dyld diz:

DYLD_LIBRARY_PATH

This is a colon separated list of directories that contain libraries. The dynamic linker searches these directories before it searches the default locations for libraries. It allows you to test new versions of existing libraries.

For each library that a program uses, the dynamic linker looks for it in each directory in DYLD_LIBRARY_PATH in turn. If it still can't find the library, it then searches DYLD_FALLBACK_FRAMEWORK_PATH and DYLD_FALLBACK_LIBRARY_PATH in turn.

Use the -L option to otool(1). to discover the frameworks and shared libraries that the executable is linked against.

Você provavelmente desejaria algo como

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

para preceder . (diretório atual) à lista de locais pesquisados. No meu OS X não modificado, DYLD_LIBRARY_PATH não tem valor atual:

$ echo $DYLD_LIBRARY_PATH

$

Dependendo de como você pretende executar seu programa, é necessário definir isso de forma diferente, por exemplo, no Xcode (eu não sei onde).

    
por 12.05.2011 / 09:32
21

Nunca se deve definir export DYLD_LIBRARY_PATH no seu sistema.

Os caminhos da biblioteca compartilhada podem ser corrigidos usando otool -L e install_name_tool .

Por exemplo, se você compilar o Perl DBD-MySQL, você não poderá usá-lo, pois o linker não sabe onde você instalou o MySQL.

># make
....


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)


#> install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib blib/arch/auto/DBD/mysql/mysql.bundle


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)



#> make test
...
Result: PASS

#> make install

Isso é tão simples quanto isso.

    
por 25.02.2014 / 19:51
7

No Xcode 4 você pode adicioná-lo ao projeto Scheme para evitar erros como este:

dyld: Library not loaded: @loader_path/libLeap.dylib
  Referenced from: /Users/paulsolt/Library/Developer/Xcode/DerivedData/LeapTest-eqcxmzewheyjusgrcszyvlcxlgna/Build/Products/Debug/LeapTest
  Reason: image not found
  1. No menu, clique em "Produto" - > "Editar esquema" - > Guia "Argumentos" - > Adicione "Variáveis de ambiente" - > Chave: DYLD_LIBRARY_PATH Valor: / Users / MyUserAccount / path / para / lib

  2. Altere o caminho para sua conta de usuário e o caminho completo para a pasta da biblioteca.

  3. Você deve conseguir criar e executar.

    
por 08.11.2012 / 20:07