จะรวบรวมโปรแกรม C ที่ใช้ math.h ได้อย่างไร


15

ฉันกำลังมีปัญหาในส่วนหัวของแฟ้ม math.h sqrt(d)และเมื่อฉันใช้ฟังก์ชั่นรากที่สองในขณะที่ แต่คอมไพเลอร์ของฉันไม่สนับสนุนสิ่งนี้ โปรดแนะนำฉันเกี่ยวกับปัญหานี้

รุ่น Ubuntu ของฉันคือ 2012


2
ในขณะที่เราชอบคำถามเกี่ยวกับการเขียนโปรแกรม - คำถามนั้นต้องเกี่ยวข้องกับอูบุนตู - คุณช่วยอธิบายรายละเอียดเกี่ยวกับปัญหาได้ที่นี่ - ตัวอย่าง ฯลฯ ?
fossfreedom

มันเหมือน sqrt ((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1)) ... คอมไพเลอร์ของฉันไม่สนับสนุนคำสั่งนี้
shreya

1
โปรดตอบกลับโดยแก้ไขคำถามของคุณ ให้ตัวอย่างรหัสวิธีที่คุณคอมไพล์เวอร์ชั่นอูบุนตูเวอร์ชั่นคอมไพเลอร์คุณได้ลองทำสิ่งนี้กับคอมไพเลอร์ / distro อื่นแล้วหรือยัง เกิดอะไรขึ้น ฯลฯ
fossfreedom

1
@shreya คำถามเกี่ยวกับปัญหาของรหัสที่คุณเขียนต้องอธิบายถึงปัญหาเฉพาะ - และรวมถึงรหัสที่ถูกต้องในการทำซ้ำ - ในคำถามนั้น ดูSSCCE.orgสำหรับคำแนะนำ
Braiam

4
ฉันไม่คิดว่านี่เป็นหัวข้อนอกเรื่อง ในระบบปฏิบัติการอื่น ๆ เช่น Windows คุณไม่จำเป็นต้องผ่านตัวเชื่อมโยงพิเศษเพื่อใช้ไลบรารีคณิตศาสตร์ในโปรแกรม C แม้แต่ในระบบปฏิบัติการ Unix ที่มีระบบปฏิบัติการไลบรารี่มาตรฐาน C ก็ไม่จำเป็นต้องใช้สิ่งนี้ นี่เป็นปัญหาที่ผู้ใช้หลายคนเผชิญเมื่อพวกเขาเปลี่ยนมาใช้ระบบ GNU / Linux เช่น Ubuntu ฉันหวังว่าคำถามจะถูกเขียนให้ดีขึ้นเพื่อรวมข้อผิดพลาดเฉพาะ - ถ้าเราจบลงด้วยการพิจารณาในหัวข้อนี้บางทีเราควรแก้ไขมัน - แต่นี่ไม่ใช่คำถามการเขียนโปรแกรม C ทั่วไปมันเป็นคำถามเกี่ยวกับวิธีการใช้gccบน Ubuntu .
Eliah Kagan

คำตอบ:


25

ผนวก-lmกับจุดสิ้นสุดของคุณgccคำสั่ง

ด้วย GCC รุ่นล่าสุดทั้งหมดในระบบ GNU / Linux เช่น Ubuntu เมื่อคุณใช้ไลบรารีคณิตศาสตร์คุณจะต้องเชื่อมโยงกับมันอย่างชัดเจน มันไม่ได้เชื่อมโยงโดยอัตโนมัติพร้อมกับส่วนที่เหลือของไลบรารี C มาตรฐาน

หากคุณกำลังรวบรวมในบรรทัดคำสั่งด้วยgccหรือg++คำสั่งที่คุณจะทำได้โดยการวาง-lmในตอนท้ายของคำสั่ง

ตัวอย่างเช่น: gcc -o foo foo.c -lm


5

หากคุณกำลังจะรวบรวมโปรแกรม C ที่มีmath.h ไลบรารี่ใน LINUX โดยใช้ GCC หรือ G ++ คุณจะต้องใช้ตัวเลือก–lmหลังจากคำสั่งคอมไพล์

gcc xyz.c -o xyz -lm

ที่นี่

gccเป็นคำสั่งคอมไพเลอร์ (ชื่อคอมไพเลอร์)
xyz.cเป็นชื่อไฟล์ต้นฉบับ
-oเป็นตัวเลือกในการระบุไฟล์ที่ส่งออก
xyzเป็นชื่อของไฟล์ที่ส่งออก
-lmเป็นตัวเลือกในการเชื่อมโยงไลบรารีคณิตศาสตร์ ( libm )

สำหรับรายละเอียดเพิ่มเติมที่นี่คือลิงค์ที่มีบทความฉบับสมบูรณ์
การคอมไพล์โปรแกรม C ด้วย math.h ใน Linux


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