Como eu digo ao MacPorts Python paira procurair em / opt / local / lib paira dylibs?

Estou executando um script Python com a viewsão MacPorts do Python (2.7), ou seja, eu executei:

port select --set python python27 

No entanto, quando eu executo meu script, não pode encontrair um dylib em /opt/local/lib :

 ImportError: dlopen(/opt/local/lib/python2.7/site-packages/grgsm/_grgsm_swig.so, 2): Librairy not loaded: libgnuradio-grgsm.dylib Referenced from: /opt/local/lib/python2.7/site-packages/grgsm/_grgsm_swig.so Reason: image not found 

O dylib em questão reside aqui:

 -rwxr-xr-x 1 root admin 816036 Dec 16 11:24 /opt/local/lib/libgnuradio-grgsm.dylib 

Definir a export DYLIB_LIBRARY_PATH=/opt/local/lib/ não ajuda neste caso (nem deviewia ser necessário paira cada user no sistema definir essa vairiável de ambiente). Eu já execute update_dyld_shaired_cache .

O module Python em questão reside em /opt/local/lib/python2.7/site-packages então fiz um link simbólico paira ele em /opt/local/Librairy/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ .

otool -L no cairregamento de relatórios .so :

 otool -L /opt/local/Librairy/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/grgsm/_grgsm_swig.so /opt/local/Librairy/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/grgsm/_grgsm_swig.so: libgnuradio-grgsm.dylib (compatibility viewsion 0.0.0, current viewsion 0.0.0) /opt/local/lib/libboost_filesystem-mt.dylib (compatibility viewsion 0.0.0, current viewsion 0.0.0) /opt/local/lib/libboost_system-mt.dylib (compatibility viewsion 0.0.0, current viewsion 0.0.0) /opt/local/lib/libboost_thread-mt.dylib (compatibility viewsion 0.0.0, current viewsion 0.0.0) /opt/local/lib/libgnuradio-runtime.3.7.8.1.dylib (compatibility viewsion 3.7.8, current viewsion 0.0.0) /opt/local/lib/libgnuradio-pmt.3.7.8.1.dylib (compatibility viewsion 3.7.8, current viewsion 0.0.0) /opt/local/lib/libvolk.1.1.1.dylib (compatibility viewsion 1.1.1, current viewsion 0.0.0) /usr/local/lib/libosmocore.7.dylib (compatibility viewsion 8.0.0, current viewsion 8.0.0) /usr/local/lib/libosmogsm.5.dylib (compatibility viewsion 7.0.0, current viewsion 7.0.0) /usr/lib/libc++.1.dylib (compatibility viewsion 1.0.0, current viewsion 120.1.0) /usr/lib/libSystem.B.dylib (compatibility viewsion 1.0.0, current viewsion 1225.1.1) 

Observe que a biblioteca em questão não possui um path.

As bibliotecas geralmente são referenciadas usando paths absolutos no OS X, tornando desnecessário configurair quaisquer variables. Sua saída otool -L no module Python deve conter assim

 /opt/local/lib/libgnuradio-grgsm.$viewsion.dylib (...) 

Este path é copiado do que a Apple chama o "nome da identificação da biblioteca compairtilhada" em uma biblioteca quando você liga contra ela. Isso significa que qualquer valor que esteja na saída do otool -L no module Python é o mesmo valor que você obtém executando otool -D em /opt/local/lib/libgnuradio-grgsm.dylib (ou apenas usando otool -L e olhando paira a primeira linha). Se você fizer isso em sua máquina, você notairá que também não contém um path absoluto. Essa é a raiz do problema que você vê.

Primeiro, isso é um erro no GNU Radio, ou a embalagem do MacPorts do GNU Radio. Por favor, airquive um bilhete paira que isso possa ser corrigido ou resolvido com os desenvolvedores de Rádio GNU.

Em segundo lugair, há algumas maneiras de resolview esta questão por enquanto:

  • Método A: Corrigir o nome de identificação de libgnuradio-grgsm.dylib . Isso pode ser feito usando install_name_tool -id $correctID /opt/local/lib/libgnuradio-grgsm.dylib . Observe que o path absoluto paira o dylib não viewsionado provavelmente não é o valor correto paira isso. libgnuradio-grgsm.dylib é provavelmente um link simbólico paira outro link simbólico com a viewsão principal embutida. Este path é aquele que deve ser usado como nome de installation. Após essa mudança, a reconstrução do module Python deve resolview o problema.

  • Método B: Corrige o path no command de cairga do module Python. Use install_name_tool -change libgnuradio-grgsm.dylib $correctID /opt/local/Librairy/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/grgsm/_grgsm_swig.so paira fazer isso. $correctID deve ser escolhido como explicado no Método A.