ฉันจะตั้งค่า DYLD_LIBRARY_PATH บน Mac OS X ได้ที่ไหนและเป็นความคิดที่ดีหรือไม่


28

ฉันกำลังพยายามติดตั้ง Solver ที่เขียนด้วย C ++ บน Mac (OS X) ของฉันเพื่อใช้กับรหัสที่ฉันเขียนใน XCode

เอกสารแก้ปัญหาระบุว่า:

ต้องแน่ใจว่าได้ "." ในของคุณDYLD_LIBRARY_PATHเพื่อ

  • เรียกใช้โปรแกรมปฏิบัติการสำเร็จรูป
  • เชื่อมโยงกับ libamg.dylib (และ gfortran RTSlibs)

ฉันไม่เข้าใจความหมายของสิ่งนี้ ฉันต้องเปลี่ยนอะไรและที่ไหน

ฉันทำ Googling มาแล้วแต่ยังไม่เจออะไรที่ง่ายพอสำหรับมือใหม่อย่างฉัน! หากมีผู้ป่วยคนใดออกไปที่นั่นซึ่งไม่รังเกียจที่จะสั่งให้ฉันไปยังแหล่งข้อมูลออนไลน์หรือให้ข้อมูลเกี่ยวกับวิธีการตั้งค่าตัวแปรสภาพแวดล้อมและสถานที่ฉันจะขอบคุณมาก

คำตอบ:


20

มันเป็นตัวแปรสภาพแวดล้อมและโดยปกติแล้วจะตั้งค่าใน Terminal โดย

export DYLD_LIBRARY_PATH=someValue

man dyld พูดว่า:

DYLD_LIBRARY_PATH

นี่เป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนที่มีไลบรารี ตัวเชื่อมโยงแบบไดนามิกค้นหาไดเรกทอรีเหล่านี้ก่อนที่จะค้นหาตำแหน่งที่ตั้งเริ่มต้นสำหรับไลบรารี ช่วยให้คุณทดสอบไลบรารี่ที่มีอยู่เวอร์ชันใหม่

สำหรับแต่ละไลบรารีที่โปรแกรมใช้ตัวเชื่อมโยงแบบไดนามิกจะค้นหาในแต่ละไดเรกทอรีDYLD_LIBRARY_PATHตามลำดับ หากยังไม่พบห้องสมุดก็จะทำการค้นหา DYLD_FALLBACK_FRAMEWORK_PATHและDYLD_FALLBACK_LIBRARY_PATHเปิด

ใช้ตัวเลือกในการ-L otool(1)เพื่อค้นหาเฟรมเวิร์กและไลบรารีที่แบ่งใช้ซึ่งเชื่อมโยงกับไฟล์เรียกทำงาน


คุณอาจต้องการบางสิ่งบางอย่าง

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

เพื่อเพิ่ม.(ไดเรกทอรีปัจจุบัน) ไปยังรายการตำแหน่งที่ค้นหา ใน OS X ที่ไม่ได้แก้ไขของฉันDYLD_LIBRARY_PATHไม่มีค่าปัจจุบันแม้ว่า:

$ echo $DYLD_LIBRARY_PATH

$

ขึ้นอยู่กับว่าคุณตั้งใจจะรันโปรแกรมของคุณคุณจะต้องตั้งค่านี้แตกต่างกันเช่นใน Xcode (ฉันไม่รู้ว่าที่ไหน)


1
ผมเห็นด้วยกับ @TVNshack ว่าคุณควรจะมักจะไม่ได้ตั้งค่าDYLD_LIBRARY_PATHมิได้DYLD_FRAMEWORK_PATHเพราะมันอาจป้องกันไม่ให้ libs โหลดเหล่านั้นเพื่อหา libs ระบบที่จัดไว้ให้ เพื่อให้ใช้งานได้ดีขึ้นให้ใช้FALLBACKเวอร์ชันต่างๆแทน ข้อมูลเพิ่มเติมในคำตอบนี้: stackoverflow.com/a/3172515/43615
SuperTempel

21

หนึ่งไม่ควรตั้งค่าexport DYLD_LIBRARY_PATHในระบบของคุณ

ที่ใช้ร่วมกันเส้นทางห้องสมุดสามารถแก้ไขได้โดยใช้และotool -Linstall_name_tool

ตัวอย่างเช่นหากคุณรวบรวม Perl DBD-MySQL คุณจะไม่สามารถใช้งานได้เนื่องจากตัวเชื่อมโยงไม่รู้ว่าคุณติดตั้ง 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

นี่มันง่ายอย่างนั้น


FYI แบบด่วน: install_name_tool โดยล้มเหลวอย่างเงียบ ๆ หากพา ธ ใหม่ยาวกว่าพา ธ ที่จะถูกแทนที่ ตรวจสอบกับ 'otool -L' ทุกครั้งว่าพา ธ นั้นเปลี่ยนไป
user15685

สมมติว่าฉันรวบรวม Plug In (โดยทั่วไป Dynamic Library ด้วยตัวเอง) ซึ่งขึ้นอยู่กับ Dynamic Library อื่น ฉันจะจัดหาปลั๊กอินและการพึ่งพาสำหรับผู้ใช้รายอื่นได้อย่างไร
Royi

หากคุณตั้งค่าแทนDYLD_FALLBACK_FRAMEWORK_PATHมันจะทำงานในกรณีนี้ นั่นง่ายกว่าการเปลี่ยนพา ธ ภายในของ libs โดยเฉพาะถ้าคุณต้องการส่ง dylibs ที่สร้างขึ้นมาพร้อมกับแอพของคุณและไม่สามารถคาดเดาเส้นทางที่พวกมันลงท้ายด้วย
SuperTempel

7

ใน Xcode 4 คุณสามารถเพิ่มลงในโครงการโครงการเพื่อหลีกเลี่ยงข้อผิดพลาดเช่นนี้:

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. ในเมนูคลิกที่ "ผลิตภัณฑ์" -> "แก้ไขแบบแผน" -> แท็บ "อาร์กิวเมนต์" -> เพิ่ม "ตัวแปรสภาพแวดล้อม" -> คีย์: DYLD_LIBRARY_PATH ค่า: / Users / MyUserAccount / path / to / lib

  2. เปลี่ยนเส้นทางไปยังบัญชีผู้ใช้ของคุณและเส้นทางแบบเต็มไปยังโฟลเดอร์ไลบรารี

  3. คุณควรจะสามารถสร้างและเรียกใช้

การตั้งค่า DYLD_LIBRARY_PATH ใน Xcode 4

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.