การติดตั้งไลบรารีและไฟล์ส่วนหัวภายใต้ Ubuntu Linux สำหรับการพัฒนา C / C ++


5

ฉันต้องยอมรับว่าฉันรู้สึกสูญเสียไปอย่างสมบูรณ์ในแต่ละครั้งที่ฉันต้องปฏิบัติตามการพึ่งพาของรหัส C หรือ C ++ บางอย่าง ปัจจุบันฉันอยู่ อูบุนตู 9.10 (Karmic Koala) แต่ฉันจำความรู้สึกเดียวกันของความเหงาจาก Windows ได้

ฉันคิดว่าฉันเข้าใจไลบรารี C, C ++, สแตติกและไดนามิก, ไฟล์ส่วนหัวและการเชื่อมโยงรวมถึงตัวจัดการแพ็คเก็ต "ความถนัด" แต่เมื่อพูดถึงภาคปฏิบัติ แม้ว่าฉันจะจัดการมันอย่างใดฉันก็ไม่รู้จริงๆว่าฉันไปถึงที่นั่นและเรียนรู้อะไรจากมันได้

ตัวอย่างเช่นวันนี้ฉันต้องการใช้รหัสที่ระบุว่า "มันใช้ glib2, curl และ openssl" . ในที่สุดฉันก็พบว่า curl และ openssl ติดตั้งแล้ว แต่ฉันจำเป็นต้องติดตั้ง libcurl3-dev ผ่านตัวจัดการแพ็คเก็ตของฉันซึ่งจะต้องใช้ (และติดตั้ง) libcurl4-openssl-dev ดังนั้นฉันจึงไม่ต้องกังวลเกี่ยวกับ OpenSSL แต่ฉันต้องเลือกชื่อแพ็กเก็ตเหล่านี้จาก 67 ตัวเลือกที่ทำให้เกิดเสียงคล้ายกัน และ glibในทางกลับกันก็จะต้องดาวน์โหลดและสร้างด้วยตนเองเนื่องจากไม่มีแพ็กเก็ตที่ตรงกันเลย

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

เมื่อฉันมีคำอธิบายที่คลุมเครือของการอ้างอิง:

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

เว็บไซต์นี้เกี่ยวกับการเขียนโปรแกรมไม่ใช่ความเสียใจ คำอธิบายที่กระชับมากขึ้นของปัญหาที่เป็นรูปธรรม?
bmargulies

1
ความรู้สึกเริ่มแรกของฉันคือสิ่งนี้เป็นคำถามการเขียนโปรแกรมส่วนเพิ่ม แต่ยิ่งฉันคิดถึงมันมากขึ้นฉันคิดว่ามันมีประโยชน์ มันเป็นความยุ่งยากสำหรับนักพัฒนาหลายคน - ใคร ไม่ได้ ถูกผลักลงไปในโพรงกระต่ายและใช้เวลาทั้งเช้ารวบรวม 12 การอ้างอิง? ฉันคิดว่าคำถามมีกลุ่มเป้าหมายกว้างกว่าคนส่วนใหญ่ที่ต้องการยอมรับ
Duck

การอ่านนี้เป็น "ฉันจะใช้ตัวจัดการแพคเกจได้อย่างไร" คำถามกับฉันและทำให้ผู้ใช้ Superfodder OTOH ฉันเห็น "ฉันจะวิ่งลงและติดตั้งอ้างอิงได้อย่างไร ด้วยมือ ? "เหมาะสมกว่าสำหรับ SO เพราะในกรณีที่ไม่มีเอกสารที่ดีสำหรับทุกสิ่งที่คุณต้องได้รับคุณจะจบการอ่าน ./configure และ make กำลังมองหาข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องในฝนตกหนัก ...
dmckee

แพ็คเกจการพัฒนาสำหรับไลบรารี glib2 ถูกเรียกว่าเชื่อหรือไม่ว่า libglib2.0-dev
user23307

@justin: ขอบคุณ ฉันค้นหา packages.debian.org สำหรับ "glib" และสิ่งนี้ไม่ได้ผลลัพธ์ที่มีประโยชน์ ฉันไม่ทราบว่าฉันต้องค้นหา "glib2" แล้วฉันจะได้รับ "glib2.0dev"
Lena Schimmel

คำตอบ:


3

การพิจารณาว่าแพ็กเกจที่จะติดตั้งเพื่อตอบสนองการพึ่งพาไม่ใช่วิทยาศาสตร์ที่แน่นอน แต่มีเคล็ดลับที่อาจช่วยคุณได้:

  • เมื่อคุณทำงานกับการพึ่งพาที่พอใจในการรวบรวมบางสิ่งบางอย่างคุณเกือบจะต้องการแพ็คเกจที่ลงท้ายด้วย -dev. นี่เป็นการพัฒนาที่สั้น ตัวอย่างเช่น openssl แพคเกจประกอบด้วยเครื่องมือบรรทัดคำสั่งและไลบรารีสำหรับการทำงานกับการเข้ารหัส libssl-dev มีไฟล์ส่วนหัวและไลบรารีสำหรับการพัฒนา openssl
  • หากต้องการค้นหาแพ็คเกจด้วยคำหลักโดยใช้ apt ให้ใช้ apt-cache search. ตัวอย่างเช่นฉันไม่รู้จริง ๆ ว่า libssl-dev เป็นชื่อของแพ็คเกจ openssl dev ฉันพบว่าการใช้คำสั่งนี้: apt-cache search openssl | grep dev จากนั้นไปกับภาษาที่ไม่เกี่ยวข้องกับภาษา / ห้องสมุดอื่น
  • คุณสามารถดูแพ็คเกจที่คุณติดตั้งโดยใช้ dpkg -lโดยทั่วไปเพียงแค่หาแพ็คเกจที่คุณต้องการและบอกให้ติดตั้งถ้าคุณมีมันแล้ว apt จะบอกคุณ เคล็ดลับที่ดีอีกข้อหนึ่งคือถ้าคุณต้องการทราบว่าแพ็คเกจใดเป็นเจ้าของไฟล์ให้ใช้ dpkg -S /path/to/thefile
  • หากคุณต้องการสร้างแพคเกจจากแหล่งข้อมูลไม่มีวิธีง่ายๆในการแก้ไขแผนผังการพึ่งพา ./configure ควรบอกคุณหรือไฟล์ README บ่อยครั้งที่พวกเขาจะตั้งชื่อแพคเกจที่แน่นอนที่จำเป็น
  • สำหรับการหาสิ่งที่จะเชื่อมโยงมักจะเกี่ยวข้องกับชื่อของแพคเกจหรือชื่อทั่วไปที่สุดสำหรับสิ่งที่คุณต้องการ สำหรับตัวอย่าง libssl ของเราคุณจะผ่าน -lssl ถึง gcc หากคุณไม่รู้ว่าตัวเลือกสำหรับอะไร -l คือดูที่ / lib / (เพียงลบ "lib" จากด้านหน้าและ ".so ... " จากด้านหลังเพื่อรับ 'กลาง' ซึ่งส่งผ่านไปยัง gcc)

2
ฟังก์ชันการค้นหาเนื้อหาแพ็คเกจที่ packages.debian.org เป็นทรัพยากรที่ดีเช่นกัน

2
เพิ่มข้อมูลบางอย่างเกี่ยวกับ "apt-file search foo.h" ... debianhelp.de/apt-file.html มิฉะนั้นคำตอบของคุณจะค่อนข้างสมบูรณ์
akira

1
@akira: ไฟล์ apt น่าจะเจ๋งทีเดียว ฉันไม่เคยรู้เรื่องนี้มาก่อนขอบคุณมาก คุณควรทำให้คำตอบนี้แยกจากกันคุณจะได้ upvote จากฉัน;)
Lena Schimmel

2

ไม่มีใครพูดถึง

aptitude build-dep

รายการ man-page นั้นค่อนข้างครอบคลุม

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