คำถามติดแท็ก libraries

ไลบรารีคือชุดของฟังก์ชันที่โปรแกรมสามารถใช้ได้ พวกเขาสามารถโหลดแบบไดนามิกโดยโปรแกรมหรือพวกเขาอาจจะรวบรวมในโปรแกรม


7
วิธีการค้นหาไฟล์ไลบรารีแบบไดนามิกที่โหลดได้เมื่อรัน?
ฉันต้องการค้นหารายการไลบรารีแบบไดนามิกที่โหลดแบบไบนารีเมื่อทำงาน (ด้วยเส้นทางแบบเต็ม) ฉันใช้ CentOS 6.0 ทำอย่างไร

2
เหตุใดไลบรารีที่แบ่งใช้จึงสามารถเรียกใช้งานได้
เหตุใดจึงมีการแชร์ไลบรารีเกือบทั้งหมดใน/usr/lib/จึงมีบิตสิทธิการใช้งานที่ตั้งค่าได้ ฉันไม่เห็นกรณีใช้งานใด ๆ สำหรับการดำเนินการ บางคนจัดการเพื่อเชื่อมต่อรูปแบบของmainฟังก์ชั่นบางอย่างเพื่อพิมพ์ลิขสิทธิ์สั้น ๆ และหมายเหตุรุ่น แต่หลายคนไม่ทำอย่างนั้น ดังนั้นจุดประสงค์ของการตั้งค่านี้xคืออะไร ผู้ทำแพ็กเกจไลบรารีต้องทำเช่นนั้นหรือไม่ จะเกิดอะไรขึ้นถ้าฉันdlopen()เป็นห้องสมุดสาธารณะที่มี0644สิทธิ์

2
ใช้ไลบรารีที่แบ่งใช้ใน / usr / local / lib
ฉันได้สร้างห้องสมุดบางแห่งจากแหล่งที่มาและไฟล์หลังจากmake installนั้นมา/usr/local/lib ตัวอย่างเช่นในกรณีของฉันฉันมีไฟล์libodb-2.2.soที่อยู่ในไดเรกทอรีนี้ อย่างไรก็ตามเมื่อฉันเปิดใช้งานโปรแกรมที่เชื่อมโยงกับlibodbฉันได้รับข้อผิดพลาด: ข้อผิดพลาดขณะโหลดห้องสมุดสาธารณะlibodb-2.2.so: cannont open shared object file: No such file or directory. มันหมายความว่าฉันได้สร้างปฏิบัติการของฉันไม่ถูกต้อง? หรือฉันควรระบุระบบว่าอาจมี libs ที่น่าสนใจในโฟลเดอร์/usr/local/libด้วย? ฉันใช้ Ubuntu 12.04, Linux kernel 3.2.0-38-generic
58 ubuntu  libraries 

1
ความแตกต่างระหว่าง lib, lib32, lib64, libx32 และ libexec
ระบบ Ubuntu 13.04 64 บิตของฉันมีไดเรกทอรีดังต่อไปนี้/: lib lib32 lib64 libx32 libexec ใน/usrไดเรกทอรีมี: lib lib32 libx32 libexec ดูเหมือนว่าบางสิ่งที่สามารถตอบได้อย่างง่ายดายด้วยการค้นหา แต่ฉันไม่พบสิ่งใดออนไลน์นอกจากไดเรกทอรีเหล่านี้จะจัดเก็บไลบรารีที่ใช้ร่วมกัน (ยกเว้น libexec) แต่ไลบรารีที่แบ่งใช้ใดที่ไปในโฟลเดอร์ใด (นอกเหนือจาก 32 บิตใน lib32 และ 64 บิตใน lib64) มีคนอธิบายความแตกต่างระหว่างไดเรกทอรีทั้งหมดเหล่านี้ได้ไหม

1
การโหลดไลบรารีที่แบ่งใช้และการใช้ RAM
ฉันสงสัยเกี่ยวกับวิธีที่ Linux จัดการไลบรารีที่แชร์ (อันที่จริงฉันกำลังพูดถึง Maemo Fremantle, ดิสทริบิวเตอร์เดเบียนที่เปิดตัวในปี 2009 ทำงานบน RAM ขนาด 256MB) สมมติว่าเรามีไฟล์ประมวลผลสองไฟล์เชื่อมโยงไปยัง libQtCore.so.4 และใช้สัญลักษณ์ (โดยใช้คลาสและฟังก์ชัน) เพื่อประโยชน์ของความเรียบง่ายขอเรียกพวกเขาและa bเราสันนิษฐานว่าลิงก์ประมวลผลทั้งสองเชื่อมโยงไปยังไลบรารีเดียวกัน aการเปิดตัวครั้งแรกที่เรา ต้องโหลดห้องสมุด มีการโหลดทั้งหมดหรือโหลดไปยังหน่วยความจำเฉพาะในส่วนที่ต้องการ (เนื่องจากเราไม่ใช้แต่ละคลาสจะมีเฉพาะรหัสที่เกี่ยวกับคลาสที่ใช้แล้วเท่านั้นที่กำลังโหลด) bจากนั้นเราก็เปิด เราคิดว่าaยังคงทำงานอยู่ bเชื่อมโยงไปยัง libQtCore.so.4 เกินไปและใช้บางส่วนของการเรียนที่aใช้ aแต่ยังมีบางส่วนที่ไม่ได้ใช้งานโดย ห้องสมุดจะถูกโหลดสองครั้ง (แยกกันaและแยกต่างหากb) หรือพวกเขาจะใช้วัตถุเดียวกันอยู่แล้วใน RAM หากbไม่มีสัญลักษณ์ใหม่และaกำลังใช้งาน RAM ที่ใช้งานโดยไลบรารีที่แชร์เพิ่มขึ้นหรือไม่ (หรือความแตกต่างจะไม่มีนัยสำคัญ)

4
การดูข้อมูล Linux Library / รุ่นที่ทำงานได้
ใน Windows EXE และ DLL มีข้อมูลรุ่นรวมถึงอย่างน้อยฟิลด์ต่อไปนี้: เวอร์ชันไฟล์ รุ่นผลิตภัณฑ์ ชื่อภายใน ชื่อผลิตภัณฑ์ ลิขสิทธิ์ ในห้องสมุด Linux / ปฏิบัติการ: มีเขตข้อมูลใดบ้าง วิธีการดูข้อมูลดังกล่าว? เครื่องมืออะไร / ห้องสมุดที่จะอ่าน

2
การเปลี่ยนไลบรารี่ที่เชื่อมโยงสำหรับไฟล์สั่งการที่กำหนด (CentOs 6)
ฉันมีลิงค์ที่ปฏิบัติการได้เช่นนี้: $ ldd a.out libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x00007f4881f56000) libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f4881cfb000) libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f4881965000) librt.so.1 => /lib64/librt.so.1 (0x00007f488175d000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4881540000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4881239000) . . ตำแหน่งที่ไลบรารี libcrypto และ libssl openssl 1.0.0-fips libs ฉันต้องการทดสอบกับห้องสมุด 1.0.1 แทนดังนั้นฉันจึงสร้างมันในไดเรกทอรีหลักของฉัน มีวิธีที่a.outจะเชื่อมโยงกับห้องสมุด openssl ใหม่ของฉันโดยไม่เจ็บปวดมากหรือไม่? ฉันต้องการหลีกเลี่ยง ต้องเชื่อมโยงอีกครั้งa.out(เนื่องจากเครื่องมือสร้างมีความซับซ้อนอย่างมาก) การเปลี่ยนแปลงการตั้งค่าร่วม (เพราะผู้พัฒนารายอื่นทำงานกับเครื่องนี้) เป็นไปได้ไหมที่จะทำสิ่งที่ฉันหวังไว้ที่นี่?
29 libraries  linker 

4
วิธีรันคำสั่งไลบรารี่จากเชลล์?
ฉันต้องการคำนวณความยาวของสตริง (นั่นคือค่าแฮช) ดังนั้นฉันเปิดเทอร์มินัลและทำสิ่งนี้: $ apropos length ที่ส่งคืนฉันด้วยพวงของคำสั่ง / ฟังก์ชั่นที่มี(3)หรือ(3ssl)ผนวกท้ายของพวกเขา ตอนนี้ผู้ชายคนให้ข้อมูลเกี่ยวกับความsection numbersหมายเหล่านี้ให้เรา 3 Library calls (functions within program libraries) ด้วยความอยากรู้ฉันเพิ่งลองใช้คำสั่งเหล่านี้ทั้งหมด (หวังว่าอย่างน้อยจะใช้ได้) strcspn (3) - get length of a prefix substring strlen (3) - calculate the length of a string strnlen (3) - determine the length of a fixed-size string strspn (3) …
27 shell  libraries 


1
เหตุใดจึงไม่ระบบ Unix / Linux ทราเวิร์ผ่านไดเรกทอรีจนกว่าพวกเขาจะพบรุ่นที่ต้องการของห้องสมุดที่เชื่อมโยง?
ฉันมีไบนารีปฏิบัติการที่ชื่อว่า "alpha" ที่ต้องการไลบรารีที่เชื่อมโยง (libz.so.1.2.7) ซึ่งวางไว้ที่ /home/username/myproduct/lib/libz.so.1.2.7 ฉันส่งออกไปยังอินสแตนซ์ของเทอร์มินัลของฉันก่อนที่จะวางไข่ไบนารีที่ปฏิบัติการได้ของฉันโดยดำเนินการคำสั่งต่อไปนี้ export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH ตอนนี้เมื่อฉันวางไข่แอปพลิเคชั่น "ไชโย" อื่นที่ต้องใช้ไลบรารีเดียวกัน แต่เป็นเวอร์ชั่นที่แตกต่างกันคือ (libz.so.1.2.8) ซึ่งมีอยู่ใน /lib/x86_64-linux-gnu/libz.so.1.2.8ระบบระบบจะพ่นข้อผิดพลาดต่อไปนี้ version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2) หากฉันยกเลิกการตั้งค่าLD_LIBRARY_PATH"ไชโย" จะเริ่มต้นได้ดี ฉันเข้าใจว่าพฤติกรรมดังกล่าวเป็นเพราะLD_LIBRARY_PATHมีความสำคัญเหนือเส้นทางไดเรกทอรีที่กำหนดใน/etc/ld.so.confขณะที่ค้นหาห้องสมุดที่เชื่อมโยงและดังนั้นข้อผิดพลาดดังกล่าวเกิดขึ้น ฉันแค่อยากรู้ว่าทำไมนักพัฒนาของ UNIX / LINUX จึงไม่ได้ออกแบบระบบปฏิบัติการเพื่อค้นหาไลบรารี่ที่เชื่อมโยงในไดเรกทอรีอื่นตามลำดับชั้นหากอินสแตนซ์แรกของไลบรารี่เป็นเวอร์ชันที่แตกต่างกัน พูดง่ายๆก็คือระบบ UNIX / LINUX จะผ่านกลุ่มของไดเรกทอรีต่างๆจนกว่าจะพบไลบรารีที่ต้องการ แต่ทำไมมันไม่ทำอย่างนั้นจนกว่ามันจะพบกับเวอร์ชั่นที่คาดหวังมากกว่าจะยอมรับอินสแตนซ์แรกของไลบรารี่โดยไม่คำนึงถึงเวอร์ชันของมัน?

6
ldd บอกแอปของฉันว่า“ ไม่ใช่แบบปฏิบัติการได้”
ฉันมีแอปพลิเคชั่น 32 บิต (เรียกว่า uclsyn) ฉันได้รับจากอาจารย์ดาราศาสตร์ ฉันจัดการเพื่อให้มันทำงานบน CentOS ปีที่แล้ว แต่ตอนนี้เมื่อฉันตั้งค่า CentOS VM ใหม่มันจะไม่ทำงานและฉันไม่สามารถหาสาเหตุได้ มันกลับมาพร้อมกับ "ฆ่า" นี่คือการแลกเปลี่ยนในบรรทัดคำสั่ง: $ ./uclsyn_linux Killed $ ldd ./uclsyn_linux not a dynamic executable $ file ./uclsyn_linux uclsyn_linux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped บนเครื่องที่ทำงานอยู่ …
17 centos  libraries 

3
gcc ไม่สามารถเชื่อมโยงไปยัง pthread ได้หรือไม่
ฉันเพิ่งติดตั้ง XUbuntu 11.10 64 บิต แต่ฉันมีปัญหาในการรวบรวมตัวอย่าง pthread ที่ง่ายที่สุด นี่คือรหัสpthread_simple.c: #include <stdio.h> #include <pthread.h> main() { pthread_t f2_thread, f1_thread; void *f2(), *f1(); int i1,i2; i1 = 1; i2 = 2; pthread_create(&f1_thread,NULL,f1,&i1); pthread_create(&f2_thread,NULL,f2,&i2); pthread_join(f1_thread,NULL); pthread_join(f2_thread,NULL); } void *f1(int *x){ int i; i = *x; sleep(1); printf("f1: %d",i); pthread_exit(0); } void *f2(int *x){ …
17 c  libraries  gcc  xubuntu 

1
/lib64/ld-linux-x86-64.so.2 คืออะไรและทำไมจึงสามารถใช้เพื่อเรียกใช้ไฟล์ได้
เร็ว ๆ /lib64/ld-linux-x86-64.so.2นี้ผมได้เรียนรู้เคล็ดลับว่าถ้าไฟล์ที่ขาดสิทธิ์ปฏิบัติการเราสามารถเรียกใช้ไฟล์ว่าด้วยการใช้ ตัวอย่างเช่นในการกู้คืนสิทธิ์ x สำหรับ -rw-r--r-- 1 root root 59K Mar 1 2017 /bin/chmod เราสามารถวิ่งได้ /lib64/ld-linux-x86-64.so.2 /bin/chmod +x /bin/chmod ฉันไม่รู้จริง ๆ ว่ามันสามารถทำได้มันไม่ใช่ของปรกติลึกลับชนิดไหน
17 linux  files  libraries 

1
/ usr / lib64 ไปไหนและ / usr / lib / x86_64-linux-gnu คืออะไร?
ฉันมีระบบ Ubuntu-x86_64 สองระบบ หนึ่งคือเวอร์ชัน 10.04, อีก 12.04 และมีความแตกต่างในโครงสร้างของไดเรกทอรี lib มันไม่ได้ทำให้ฉันแปลกใจ แต่ฉันอยากรู้ว่าใครรู้ว่าทำไม มีเหตุผล™ที่ดีทำไม 10.04 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux /usr/lib /usr/lib32 /usr/lib64 12.04 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 GNU/Linux /usr/lib /usr/lib/x86_64-linux-gnu

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