วิธีการตั้งค่าตัวแปรสภาพแวดล้อม LD_LIBRARY_PATH ใน linux


213

ฉันได้ดำเนินการคำสั่งแรก: export LD_LIBRARY_PATH=/usr/local/lib

จากนั้นฉันได้เปิด.bash_profileไฟล์: vi ~/.bash_profile. ในไฟล์นี้ฉันใส่:

LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH

จากนั้นหากเทอร์มินัลปิดและรีสตาร์ทการพิมพ์echo $LD_LIBRARY_PATHจะไม่แสดงผลใด ๆ

วิธีการตั้งค่าเส้นทางอย่างถาวร?


9
ชี้ให้เห็นอย่างชัดเจนที่นี่ ... หากคุณต้องการแก้ไขสิ่งที่คุณทำให้เพิ่ม$เช่นexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH
Cookie

11
เพิ่งทำงานsudo ldconfigหลังจากนั้น
Necktwi

อาจจะงี่เง่า แต่คุณ$ source ~/.bash_profile? ฉันมักจะลืมสิ่งนั้น และเช่นเดียวกับ @neckTwi พูดว่ารัน ldconfig
ashley

คำตอบ:


208

คุณควรเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับการแจกจ่ายของคุณตัวอย่างเช่นภายใต้ Ubuntu วิธีที่ถูกต้องในการทำเช่นนี้คือการเพิ่ม.confไฟล์ที่กำหนดเอง/etc/ld.so.conf.dเช่น

sudo gedit /etc/ld.so.conf.d/randomLibs.conf

ภายในไฟล์ที่คุณควรจะเขียนพา ธ ที่สมบูรณ์ไปยังไดเรกทอรีที่มีไลบรารีทั้งหมดที่คุณต้องการเพิ่มไปยังระบบเช่น

/home/linux/myLocalLibs

อย่าลืมเพิ่มเฉพาะพา ธ ไปยัง dir ไม่ใช่พา ธ เต็มสำหรับไฟล์ libs ทั้งหมดที่อยู่ในพา ธ นั้นจะถูกจัดทำดัชนีโดยอัตโนมัติ

บันทึกและรันsudo ldconfigเพื่ออัพเดตระบบด้วย libs นี้


ขออภัยที่ไม่ได้กล่าวถึงการกระจาย Fedora ของมัน 16
singha

คุณสามารถใช้โซลูชันนี้สำหรับ Fedora โซลูชันที่ Joachim Pileborg แนะนำให้มีประโยชน์ถ้าคุณตัดสินใจ จำกัด มุมมองของ libs นี้สำหรับผู้ใช้ 1 รายโดยเฉพาะหากคุณต้องการให้ lib ระบบกว้างควรใช้โซลูชันของฉัน ทุกอย่างขึ้นอยู่กับสิ่งที่คุณกำลังมองหา
user1824407

11
นี่เป็นวิธีที่ถูกต้องจริงเหรอ? สมมติว่าคุณมีผู้ใช้หลายคนกำลังสร้างห้องสมุดท้องถิ่นและคุณได้เพิ่มพวกเขาทั้งสองใน /etc/ld.so.conf.d ตอนนี้ผู้ใช้ A สามารถลิงก์ไปยังไลบรารีโลคัลของผู้ใช้ B ไม่ดี.
ergosys

/usr/local/libมักจะมีอยู่แล้วจึงมีไม่จำเป็นต้องแก้ไขไฟล์ใด ๆ sudo ldconfigเพียงแค่
nyuszika7h

1
แปลกมันทำงานกับพวกคุณทุกคน แต่มันไม่ได้ผลสำหรับฉันในขณะที่export LD_LIBRARY_PATH ....วิธีการทำงาน !!
นักบัญชี

106

เก็บเส้นทางก่อนหน้าอย่าเขียนทับ:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/

คุณสามารถเพิ่มลงใน ~ / .bashrc ของคุณ:

echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/' >> ~/.bashrc

36

เพิ่ม

LD_LIBRARY_PATH = "/ เส้นทาง / คุณ / want1: / เส้นทาง / คุณ / ต้องการ / 2"

ถึง /etc/environment

ดูเอกสารอูบุนตู

การแก้ไข: ฉันควรทำตามคำแนะนำของตัวเองและอ่านเอกสารจริง มันบอกว่าสิ่งนี้ไม่ได้ใช้กับ LD_LIBRARY_PATH: เนื่องจาก Ubuntu 9.04 Jaunty Jackalope, LD_LIBRARY_PATH ไม่สามารถตั้งค่าในไฟล์ $ HOME / .profile, / etc / profile, หรือ / etc / environment คุณต้องใช้ไฟล์การกำหนดค่า/etc/ld.so.conf.d/ .conf * ดังนั้นคำตอบของ user1824407 จึงเป็นจุดที่


ว้าวฉันดูหน้านั้นหลายครั้งและมองข้ามไป ขอขอบคุณที่จำได้และแจ้งให้เราทราบ
Michael Scheper

4
Ubuntu เป็นกรณีพิเศษที่นี่ มุมมองของ Ubuntu คือผู้ใช้ทั้งหมดต้องการไลบรารีเดียวกันและมีที่เดียวสำหรับแต่ละไลบรารี (อ่านการสนทนาใน Launchpad bug # 366728) อย่างไรก็ตามในระบบการวิจัยหรือพัฒนาผู้ใช้หลายคนคุณต้องการให้ผู้ใช้แต่ละคนสามารถมีไลบรารี่ของตนเอง ลีนุกซ์ส่วนใหญ่อนุญาตให้ทำเช่นนี้ได้
Joachim Wagner

9
ใช้เวลา 4 ชั่วโมงพยายามหาสาเหตุที่ฉันสามารถตั้งค่า PATH และ PKG_CONFIG_PATH แต่ไม่ใช่ LD_LIBRARY_PATH ฉันทำไม่ได้
Mikhail Cheshkov

@JoachimWagner ใช่สิ่งนี้ถูกต้องและทำไม conda และ / หรือ bioconda หรือ virtenv เป็นวิธีที่ต้องการในการเรียกใช้โปรแกรมเฉพาะที่มีตัวแปรสภาพแวดล้อมพิเศษ โดยใช้สภาพแวดล้อมที่เข้ารหัสการตั้งค่าเส้นทาง LD_LIBRARY โดยไม่ตั้งใจจะไม่มีปัญหา / ปัญหาระบบ
Andor Kiss

23

ไฟล์.bash_profileถูกเรียกใช้งานโดยเชลล์การเข้าสู่ระบบเท่านั้น คุณอาจต้องใส่มัน~/.bashrcหรือเพียงแค่ออกจากระบบและเข้าสู่ระบบอีกครั้ง


ขอบคุณ Joachim Pileborg ฉันรีบูตระบบและตอนนี้เส้นทางของมันถูกตั้งค่าอย่างถาวร
singha

21

อีกทางเลือกหนึ่งคุณสามารถรันโปรแกรมด้วยไลบรารีที่ระบุ:

/lib/ld-linux.so.2 --library-path PATH EXECUTABLE

อ่านเพิ่มเติมได้ที่นี่


2
ช่วยฉันด้วยเช่นกัน
spt025

17

ด้วยเหตุผลบางอย่างไม่มีใครพูดถึงความจริงที่ว่า bashrc จำเป็นต้องได้รับแหล่งข้อมูลใหม่หลังจากแก้ไข คุณสามารถออกจากระบบและกลับเข้าสู่ระบบ (เหมือนที่กล่าวข้างต้น) แต่คุณยังสามารถใช้คำสั่งนี้หรือsource ~/.bashrc. ~/.bashrc


14

ใส่export LD_LIBRARY_PATH=/usr/local/libใน~/.bashrc[โดยเฉพาะอย่างยิ่งในช่วงปลายสคริปต์เพื่อหลีกเลี่ยงการแทนที่ใด ๆ ในระหว่างการเริ่มต้น~/.bashrcมาพร้อมกับif-elseงบ]

โพสต์ว่าเมื่อใดก็ตามที่คุณเปิดเทอร์มินัล / konsole ใหม่LD_LIBRARY_PATHจะสะท้อนให้เห็น


ขออภัยที่ไม่ได้กล่าวถึงการกระจาย Fedora ของมัน 16
singha

7
  1. ไปที่โฮมโฟลเดอร์และแก้ไข. profile
  2. วางบรรทัดต่อไปนี้ไว้ท้ายสุด

    export LD_LIBRARY_PATH=<your path>

  3. บันทึกและออก.

  4. ดำเนินการคำสั่งนี้

    sudo ldconfig


3

ฉันทำต่อไปในมิ้นต์ 15 ถึง 17 ยังทำงานบนเซิร์ฟเวอร์อูบุนตู 12.04 ขึ้นไป:

sudo vi /etc/bash.bashrc 

เลื่อนไปที่ด้านล่างและเพิ่ม:

export LD_LIBRARY_PATH=.

ผู้ใช้ทุกคนมีการเพิ่มตัวแปรสภาพแวดล้อม


3

คุณอาจจะลองเพิ่มสคริปต์ที่กำหนดเองพูด ในmyenv_vars.sh/etc/profile.d

cd /etc/profile.d
sudo touch myenv_vars.sh
sudo gedit myenv_vars.sh

เพิ่มลงในไฟล์เปล่าแล้วบันทึก

export LD_LIBRARY_PATH=/usr/local/lib

ออกจากระบบและเข้าสู่ระบบLD_LIBRARY_PATHจะได้รับการตั้งค่าอย่างถาวร


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