2013-06-07 22 views
8

Xin chào tôi đang sử dụng Linux 12.04 và geany để mã hóa. Mã tôi đang viết trong C làm việc hoàn toàn tốt cho đến khi tôi sử dụng lệnh sqrtf để tìm căn bậc hai của một phao. Lỗi: HAC3.c: (. Văn bản + 0xfd7): tham chiếu không xác định đối với `sqrtf '.sqrtf undefined tham chiếu đến `sqrtf 'trong c

Phần mã tôi đang sử dụng sqrtf:

float syn(float *a, float *b, int dimensions) 
{ 
    float similarity=0; 
    float sumup=0; 
    float sumdown=0; 
    float as=0; 
    float bs=0; 
    int i; 
    for(i=0; i<dimensions; i++) 
    { 
     sumup = sumup + a[i] * b[i]; 
     as = as + a[i] * a[i]; 
     bs = bs + b[i] * b[i]; 
    } 
    sumdown = sqrtf(as) * sqrtf(bs); 
    similarity = sumup/sumdown; 
    return similarity; 
} 

tôi bao gồm math.h nhưng điều này dường như không có vấn đề. Vì vậy, tôi tự hỏi là có cách nào để sửa chữa geany vì vậy điều này sẽ không đến một lần nữa? Tôi có ít kiến ​​thức để cố gắng giải thích nếu có thể.

+3

sqrtf từ c99. và tùy chọn liên kết. Ví dụ: 'gcc prog.c -std = c99 -lm' – BLUEPIXY

+1

Để tham khảo sau: nếu có gì đó không biên dịch/liên kết: hãy xem ** man -k **, trong trường hợp ** man - k sqrtf ** ... nó sẽ cho bạn biết cách sử dụng nó. – tink

+0

man -k sqrtf là gì? –

Trả lời

7

Chuyển đến Build ->Set Build Commands sau đó nhấp vào nhãn trống và nó sẽ cho phép bạn chỉ định nhãn mới (đặt tên là Link). Nhập vào số gcc -Wall -o "%e" "%f" -lm - trong đó -lm sẽ yêu cầu liên kết thư viện math với ứng dụng của bạn. Nhấp vào OK.

Sau đó, nhấp vào Build và chọn nhãn mới được tạo của bạn - Link. Điều này nên làm điều đó cho bạn.

+0

Đây là câu trả lời hoàn hảo cho câu hỏi của tôi. Cảm ơn bạn sir :) –

+0

Vui vì tôi đã có thể giúp :) – Nobilis

+1

Thật tốt khi lưu ý rằng cờ -m phải được chỉ định sau các tệp. Tôi đã có một lỗi gây ra bằng cách làm điều này không chính xác. – Flipbed

7

Bạn cần liên kết với -lm để cung cấp các chức năng toán học.

+0

Trên 'man sqrtf' bạn sẽ lưu ý:" Liên kết với -lm. " –

+0

làm thế nào tôi có thể liên kết chính xác-lm trong geany? Tôi xin lỗi nhưng kiến ​​thức của tôi là ít –