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

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

8
ความแตกต่างระหว่างห้องสมุดแบบคงที่และที่ใช้ร่วมกัน?
อะไรคือความแตกต่างระหว่างห้องสมุดแบบคงที่และที่ใช้ร่วมกัน? ฉันใช้ Eclipse และมีโปรเจ็กต์หลายประเภทรวมถึง Static Libraries และ Shared Libraries? คนหนึ่งได้เปรียบกว่าอีกคนหนึ่งหรือเปล่า?

18
ควรใช้ไลบรารีแบบไดนามิกและแบบคงที่เมื่อใด
เมื่อสร้างไลบรารีคลาสใน C ++ คุณสามารถเลือกระหว่างไลบรารี dynamic ( .dll, .so) และ static ( .lib, .a) อะไรคือความแตกต่างระหว่างพวกเขาและเมื่อใดที่เหมาะสมที่จะใช้

5
ไฟล์. a และ. so คืออะไร
ฉันกำลังพยายามพอร์ตแอปพลิเคชัน C ไปยังAIXและเริ่มสับสน ไฟล์. a และ. so คืออะไรและใช้อย่างไรเมื่อสร้าง / เรียกใช้แอปพลิเคชัน

19
ข้อผิดพลาดของ Linux ในขณะที่โหลดไลบรารีที่แชร์: ไม่สามารถเปิดไฟล์วัตถุที่แชร์: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
โปรแกรมเป็นส่วนหนึ่งของชุดทดสอบ Xenomai ซึ่งรวบรวมจาก Linux PC ไปยัง Linux + Xenomai ARM toolchain # echo $LD_LIBRARY_PATH /lib # ls /lib ld-2.3.3.so libdl-2.3.3.so libpthread-0.10.so ld-linux.so.2 libdl.so.2 libpthread.so.0 libc-2.3.3.so libgcc_s.so libpthread_rt.so libc.so.6 libgcc_s.so.1 libstdc++.so.6 libcrypt-2.3.3.so libm-2.3.3.so libstdc++.so.6.0.9 libcrypt.so.1 libm.so.6 # ./clocktest ./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No …

1
ความแตกต่างระหว่างไฟล์ไลบรารี. so, .la และ. a คืออะไร
ฉันรู้ว่า.soไฟล์เป็นไลบรารีแบบไดนามิก (หลายเธรดสามารถแชร์ไลบรารีดังกล่าวได้ดังนั้นจึงไม่จำเป็นต้องมีมากกว่าหนึ่งสำเนาในหน่วยความจำ) แต่อะไรคือความแตกต่างระหว่าง.aและ.la? ไลบรารีสแตติกเหล่านี้ทั้งหมดหรือไม่ หาก libs แบบไดนามิกมีข้อได้เปรียบใหญ่กว่าแบบคงที่ทำไมทำไมยังคงมีห้องสมุดแบบคงที่มากมาย? ฉันต้องการทราบกลไกพื้นฐานในการโหลดไลบรารี่ (ทั้งสองชนิด) และวิธีการเรียกใช้โค้ดใน lib เมื่อมันถูกนำไปใช้ที่ไหนสักแห่ง ฉันควรศึกษาส่วนใดของเคอร์เนล และฉันควรรู้คำสั่ง / ยูทิลิตี้ที่เกี่ยวข้องกับ Linux เพื่อที่จะรู้ว่ากระบวนการทำงานอย่างไร? (ตอนนี้ฉันรู้เพียงldคำสั่งเท่านั้น) เมื่อฉันควรพยายามที่จะสร้างรหัสลง.soหรือ.a? อันไหนดีกว่า? [mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l total 96 -rw-r--r-- 1 mirror mirror 22892 Sep 2 23:25 openvpn-plugin-auth-pam.a -rwxr-xr-x 1 mirror mirror 931 Sep 2 23:25 openvpn-plugin-auth-pam.la -rwxr-xr-x 1 mirror mirror …

12
จะแสดงไลบรารี่ที่ใช้ร่วมกันทั้งหมดที่ใช้งานโดยเอ็กซีคิ้วท์ใน Linux ได้อย่างไร?
ฉันต้องการทราบว่าไลบรารี่ใดที่ถูกใช้งานบนระบบของฉัน โดยเฉพาะอย่างยิ่งฉันต้องการจัดอันดับห้องสมุดที่มีการใช้งานมากที่สุดพร้อมกับไบนารีที่ใช้พวกเขา ฉันจะทำสิ่งนี้ได้อย่างไร

4
ฉันจะดูรายการฟังก์ชั่นที่ไลบรารีที่แชร์ของ Linux ส่งออกได้อย่างไร
ฉันต้องการดูฟังก์ชั่นที่ส่งออกของห้องสมุดสาธารณะบน Linux คำสั่งอะไรที่อนุญาตให้ฉันทำสิ่งนี้? (ใน Windows ฉันใช้โปรแกรมขึ้นอยู่กับ)

7
ld ไม่พบห้องสมุดที่มีอยู่
ฉันกำลังพยายามเชื่อมโยงแอปพลิเคชันกับ g ++ บนระบบ Debian lenny นี้ ld กำลังบ่นว่าไม่พบไลบรารีที่ระบุ ตัวอย่างเฉพาะที่นี่คือ ImageMagick แต่ฉันมีปัญหาที่คล้ายกันกับห้องสมุดอื่น ๆ น้อยเกินไป ฉันกำลังเรียกลิงเกอร์ด้วย: g++ -w (..lots of .o files/include directories/etc..) \ -L/usr/lib -lmagic ld บ่น: /usr/bin/ld: cannot find -lmagic อย่างไรก็ตาม libmagic มีอยู่: $ locate libmagic.so /usr/lib/libmagic.so.1 /usr/lib/libmagic.so.1.0.0 $ ls -all /usr/lib/libmagic.so.1* lrwxrwxrwx 1 root root 17 2008-12-01 03:52 …

4
C ++ Dynamic Shared Library บน Linux
นี่คือการติดตามเพื่อรวบรวมห้องสมุดที่ใช้ร่วมกันแบบไดนามิกที่มีกรัม ++ ฉันกำลังพยายามสร้างไลบรารีคลาสที่แบ่งใช้ใน C ++ บน Linux ฉันสามารถที่จะได้รับห้องสมุดเพื่อรวบรวมและผมสามารถเรียกบางส่วนของ (Non-class) ฟังก์ชั่นการใช้บทเรียนที่ผมพบว่าที่นี่และที่นี่ ปัญหาของฉันเริ่มต้นเมื่อฉันพยายามใช้คลาสที่กำหนดไว้ในไลบรารี บทช่วยสอนที่สองที่ฉันเชื่อมโยงเพื่อแสดงวิธีโหลดสัญลักษณ์สำหรับการสร้างวัตถุของคลาสที่กำหนดไว้ในไลบรารี แต่หยุดสั้น ๆ ในการใช้วัตถุเหล่านั้นเพื่อทำงานให้เสร็จ ไม่มีใครทราบบทช่วยสอนที่สมบูรณ์ยิ่งขึ้นสำหรับการสร้างไลบรารี่ C ++ ที่แชร์กันซึ่งแสดงวิธีใช้คลาสเหล่านั้นในการปฏิบัติการแยกต่างหาก บทช่วยสอนที่เรียบง่ายมากที่แสดงการสร้างวัตถุใช้งาน (getters และ setters แบบธรรมดาจะใช้ได้) และการลบจะยอดเยี่ยม ลิงก์หรือการอ้างอิงถึงโค้ดโอเพนซอร์สบางตัวที่แสดงให้เห็นถึงการใช้ไลบรารีคลาสที่ใช้ร่วมกันจะดีพอ ๆ กัน แม้ว่าคำตอบจากcodelogicและnimrodmทำงานได้ฉันแค่อยากจะเพิ่มว่าฉันหยิบสำเนาของBeginning Linux Programmingตั้งแต่ถามคำถามนี้และบทแรกของมันมีตัวอย่างรหัส C และคำอธิบายที่ดีสำหรับการสร้างและใช้ทั้งห้องสมุดแบบคงที่และใช้ร่วมกัน . ตัวอย่างเหล่านี้สามารถผ่าน Google Book Search ในรุ่นเก่าของหนังสือเล่มนั้น

1
สร้างไฟล์. so จากไฟล์. c โดยใช้บรรทัดคำสั่ง gcc
ฉันกำลังพยายามสร้างโปรเจค Hello world สำหรับลินุกซ์ไดนามิกไลบรารี (ไฟล์. so) ดังนั้นฉันมีไฟล์ hello.c: #include <stdio.h> void hello() { printf("Hello world!\n"); } ฉันจะสร้างไฟล์. so ที่ส่งออกhello()โดยใช้ gcc จากบรรทัดคำสั่งได้อย่างไร
162 c  linux  gcc  shared-libraries 

4
ฟังก์ชั่นการโทรไปจาก C
ฉันกำลังพยายามสร้างวัตถุแบบสแตติกที่เขียนใน Go to อินเตอร์เฟสด้วยโปรแกรม C (เช่นโมดูลเคอร์เนลหรือบางอย่าง) ฉันได้พบเอกสารเกี่ยวกับการเรียกฟังก์ชั่น C จาก Go แต่ฉันไม่พบวิธีการใช้งานอีกมาก สิ่งที่ฉันพบคือมันเป็นไปได้ แต่ซับซ้อน นี่คือสิ่งที่ฉันพบ: บล็อกโพสต์เกี่ยวกับการโทรกลับระหว่าง C และ Go เอกสาร Cgo โพสต์รายชื่อผู้รับจดหมาย ใครบ้างมีประสบการณ์กับสิ่งนี้หรือไม่? ในระยะสั้นฉันพยายามที่จะสร้างโมดูล PAM ที่เขียนทั้งหมดใน Go

4
จะสร้างไลบรารีที่ใช้ร่วมกันด้วย cmake ได้อย่างไร?
ฉันได้เขียนไลบรารีที่ฉันเคยรวบรวมโดยใช้ Makefile ที่เขียนเอง แต่ตอนนี้ฉันต้องการเปลี่ยนไปใช้ cmake ต้นไม้มีลักษณะดังนี้ (ฉันลบไฟล์ที่ไม่เกี่ยวข้องทั้งหมดออกไป): . ├── include │ ├── animation.h │ ├── buffers.h │ ├── ... │ ├── vertex.h │ └── world.h └── src ├── animation.cpp ├── buffers.cpp ├── ... ├── vertex.cpp └── world.cpp ดังนั้นสิ่งที่ฉันพยายามทำก็แค่รวบรวมซอร์สลงในไลบรารีที่ใช้ร่วมกันแล้วติดตั้งด้วยไฟล์ส่วนหัว ตัวอย่างส่วนใหญ่ที่ฉันพบว่าคอมไพล์ไฟล์ปฏิบัติการกับไลบรารีที่แชร์บางไลบรารี แต่ไม่ใช่แค่ไลบรารีที่แชร์ธรรมดา นอกจากนี้ยังจะมีประโยชน์ถ้ามีคนบอกฉันเกี่ยวกับไลบรารีธรรมดา ๆ ที่ใช้ cmake ดังนั้นฉันสามารถใช้สิ่งนี้เป็นตัวอย่างได้


7
ทำไม Python ไม่พบวัตถุที่แชร์ที่อยู่ในไดเร็กทอรีใน sys.path
ฉันกำลังพยายามนำเข้าpycurl: $ python -c "import pycurl" Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: libcurl.so.4: cannot open shared object file: No such file or directory ตอนนี้libcurl.so.4อยู่ใน/usr/local/lib. อย่างที่คุณเห็นสิ่งนี้อยู่ในsys.path: $ python -c "import sys; print(sys.path)" ['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', '/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', '/usr/local/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', '/usr/local/lib/python2.5/site-packages'] ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก

5
การนำเข้าจากเส้นทางสัมพัทธ์ใน Python
ฉันมีโฟลเดอร์สำหรับรหัสไคลเอ็นต์โฟลเดอร์สำหรับรหัสเซิร์ฟเวอร์ของฉันและโฟลเดอร์สำหรับรหัสที่แชร์ระหว่างกัน Proj/ Client/ Client.py Server/ Server.py Common/ __init__.py Common.py ฉันจะนำเข้า Common.py จาก Server.py และ Client.py ได้อย่างไร

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