Làm thế nào để biên dịch một chương trình C sử dụng math.h?


14

Tôi gặp vấn đề trong tệp tiêu đề math.h và khi tôi sử dụng hàm căn bậc hai như trong sqrt(d). Nhưng trình biên dịch của tôi không hỗ trợ này. Xin tư vấn cho tôi về vấn đề này.

Phiên bản Ubuntu của tôi là 2012.


2
Trong khi chúng tôi yêu các câu hỏi lập trình - câu hỏi phải liên quan đến Ubuntu - bạn có thể làm rõ chi tiết vấn đề ở đây không - ví dụ, v.v.?
fossfreedom

nó giống như sqrt ((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1)) ... trình biên dịch của tôi không hỗ trợ lệnh này
shreya

1
vui lòng trả lời bằng cách chỉnh sửa câu hỏi của bạn Cho ví dụ mã, cách bạn biên dịch, phiên bản ubfox, phiên bản của trình biên dịch, bạn đã thử làm điều này trên trình biên dịch / phân phối khác chưa. Chuyện gì xảy ra vậy?
fossfreedom

1
@shreya Các câu hỏi liên quan đến các vấn đề với mã bạn đã viết phải mô tả vấn đề cụ thể - và bao gồm mã hợp lệ để tái tạo nó - trong chính câu hỏi. Xem SSCCE.org để được hướng dẫn.
Braiam

3
Tôi thực sự không nghĩ rằng đây là ngoài chủ đề. Trên nhiều hệ điều hành khác, như Windows, không cần thiết phải vượt qua tùy chọn liên kết đặc biệt để sử dụng thư viện toán học trong các chương trình C. Ngay cả trên một số hệ điều hành giống Unix, việc triển khai thư viện C tiêu chuẩn không yêu cầu điều này. Đây là vấn đề mà nhiều người dùng gặp phải khi họ chuyển sang các hệ thống GNU / Linux như Ubuntu. Tôi muốn câu hỏi được viết tốt hơn để bao gồm lỗi cụ thể - nếu chúng ta kết thúc việc xem xét chủ đề này thì có lẽ chúng ta nên chỉnh sửa nó - nhưng đây không phải là câu hỏi lập trình C chung, đó là câu hỏi về cách sử dụng gcctrên Ubuntu .
Eliah Kagan

Câu trả lời:


24

Nối -lmvào cuối gcclệnh của bạn .

Với tất cả các phiên bản GCC gần đây trên các hệ thống GNU / Linux như Ubuntu, khi bạn sử dụng thư viện toán học, bạn phải liên kết rõ ràng với nó. Nó không tự động được liên kết đến cùng với phần còn lại của thư viện C tiêu chuẩn.

Nếu bạn đang biên dịch trên dòng lệnh bằng lệnh gcchoặc g++, bạn sẽ thực hiện điều này bằng cách đặt -lmở cuối lệnh .

Ví dụ: gcc -o foo foo.c -lm


4

Nếu bạn định biên dịch chương trình C với thư viện math.h trong LINUX bằng GCC hoặc G ++, bạn sẽ phải sử dụng tùy chọn Nottlm sau lệnh biên dịch.

gcc xyz.c -o xyz -lm

Đây,

gcc là lệnh biên dịch (tên trình biên dịch)
xyz.c là tên tệp nguồn.
-o là một tùy chọn để chỉ định tệp đầu ra.
xyz là tên của tệp đầu ra.
-lm là một tùy chọn để liên kết thư viện toán học ( libm ).

để biết thêm chi tiết ở đây là liên kết chứa bài viết đầy đủ về nó.
Biên dịch chương trình C với math.h trong Linux.


Sau lệnh liên kết, không phải lệnh biên dịch. (Xin lỗi vì nitpicking, nhưng làm cho đúng sẽ giúp hiểu các tình huống khác).
mousome
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.