DYLD_LIBRARY_PATH'ı Mac OS X'te nereye koyacağım ve bu iyi bir fikir mi?


28

XCode'da yazdığım kodla kullanmak için Mac'ime (OS X) C ++ ile yazılmış bir çözücü yüklemeye çalışıyorum.

Çözücü dokümantasyonu şunu söylüyor:

"" Olduğundan emin olun. senin DYLD_LIBRARY_PATHiçin

  • hazır çalıştırılabilir dosyaları çalıştır
  • libamg.dylib (ve zafer RTSlibs) ile bağlantı kurun

Bunun ne anlama geldiğini gerçekten anlamıyorum. Neyi değiştirmek için nereye ve neye ihtiyacım var?

Bazı googling yaptım, ama benim gibi bir acemi için yeterince basit bir şeyle karşılaşmadım! Dışarıda beni bir çevrimiçi kaynağa yönlendirmeye ya da ortam değişkenlerini nasıl ve nereye koyacağına dair birtakım bilgiler vermeyi düşünmeyen hasta insanlar varsa çok minnettar olurum.

Yanıtlar:


20

Bu bir ortam değişkenidir ve genellikle Terminal’de

export DYLD_LIBRARY_PATH=someValue

man dyld diyor:

DYLD_LIBRARY_PATH

Bu, kitaplık içeren iki noktadan oluşan dizin listesidir. Dinamik bağlayıcı, bu dizinleri kitaplıklar için varsayılan konumları aramadan önce arar. Mevcut kütüphanelerin yeni sürümlerini test etmenizi sağlar.

Bir programın kullandığı her kitaplık için, dinamik bağlayıcı onu her dizinde DYLD_LIBRARY_PATHsırayla arar . Hala kütüphane, o zaman arar bulamazsa DYLD_FALLBACK_FRAMEWORK_PATHve DYLD_FALLBACK_LIBRARY_PATHsırayla.

Kullan -Lseçeneğini otool(1). Yürütülebilir dosyanın bağlandığı çerçeveleri ve paylaşılan kütüphaneleri keşfetmek.


Muhtemelen bir şey istersiniz

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

prepend için .yerlerin listesine (geçerli dizin) arama yaptı. Değiştirilmemiş OS X'imde DYLD_LIBRARY_PATHşu anki değeri yok:

$ echo $DYLD_LIBRARY_PATH

$

Programınızı nasıl çalıştırmayı düşündüğünüze bağlı olarak, bunu farklı şekilde ayarlamanız gerekir, örneğin Xcode'da (nerede olduğunu bilmiyorum).


1
Ben genellikle gerektiğini @TVNshack katılıyorum değil ayarlamak DYLD_LIBRARY_PATHne de DYLD_FRAMEWORK_PATHo sistem tarafından sağlanan kütüphaneleri bulabilmesi için bu yüklü kütüphanelerini önleyebilir çünkü. Bu işi daha iyi hale getirmek için bunun yerine FALLBACKsürümleri kullanın . Bu cevapta daha fazla bilgi: stackoverflow.com/a/3172515/43615
SuperTempel

21

İnsan asla export DYLD_LIBRARY_PATHsisteminizi kurmamalı.

Paylaşılan kütüphane yolları otool -Lve kullanılarak sabitlenebilir install_name_tool.

Örneğin, eğer Perl DBD-MySQL'i derlerseniz, MySQL'i nereye kurduğunuzu bilmediğinden, bağlayıcı kullanamazsınız.

># 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

Bu kadar basit.


Hızlı FYI: eğer yeni yol değiştirilen yoldan daha uzunsa, install_name_tool sessizce başarısız oluyor. Her zaman 'otool -L' ile yolun beklendiği gibi değiştirildiğini doğrulayın.
user15685

Diyelim ki başka bir Dinamik Kütüphaneye bağlı olan bir Eklentiyi (Temelde Dinamik Bir Kütüphane) derledim. Eklentiyi ve bağımlılıklarını diğer kullanıcılara nasıl sağlamalıyım?
Royi

Yerine ayarlarsanız DYLD_FALLBACK_FRAMEWORK_PATH, bu does bu durumda işi. Bu, lib'lerin iç yollarını değiştirmekten çok daha kolaydır, özellikle de uygulamanızla birlikte inşa edilen dylib'leri sağlamanız gerekiyorsa ve en son kullandıkları yolu tahmin edemiyorsanız.
SuperTempel

7

Xcode 4'te, bunun gibi hatalardan kaçınmak için onu proje şemasına ekleyebilirsiniz:

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. Menüde "Ürün" -> "Düzen Düzenleme" -> "Bağımsız Değişkenler" sekmesine tıklayın -> "Çevre Değişkenleri Ekle" -> Anahtar: DYLD_LIBRARY_PATH Değer: / Kullanıcılar / MyUserAccount / path / to / lib

  2. Kullanıcı hesabınızın yolunu ve kitaplık klasörünün tam yolunu değiştirin.

  3. İnşa edip koşabilmelisin.

DYLD_LIBRARY_PATH ayarını Xcode 4 olarak ayarlama

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.