01/10/2018, 08:24
Error while build C program on Ubuntu
Em moi cai Ubuntu nen ko the type tieng Viet dc, mong moi nguoi thong cam.
Em co’ thu? build 1 chuong trinh C bang terminal thi gap error nhu sau:
/tmp/ccqu41wG.o: In function `CheckPrimeNumber':
helloworld.c:(.text+0x5e): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status
Con day la` source code (em code tren gedit)
#include <stdio.h>
#include <math.h>
#define bool _Bool
#define true 1
#define false 0
bool CheckPrimeNumber(int n)
{
if (n < 2)
return false;
else if (n == 2)
return true;
else if (n & 0)
return false;
else {
for (int i = 3; i <= sqrt(n); i += 2) {
if (n % i == 0)
return false;
}
return true;
}
}
int main()
{
int number = 7909;
if (CheckPrimeNumber(number))
printf("This is a prime number.
");
else
printf("This is not a prime number.
");
return 0;
}
Giup em nhe’, cam on moi nguoi
Bài liên quan
Hi Long Dragon.
Bạn viết hello world trước nhé.
Là sao ? Cuốn Head First C có nói cú pháp là:
gcc <source file> -o <new file>
mà ?Mình cũng build vài lần thì chạy bình thường, chỉ có trường hợp trên bị lỗi thôi
Bạn thử link thư viện math xem, biên dịch lại với command
Hi Long Dragon.
Vậy là do code bạn sai rồi.
Đâu phải do trình biên dịch @_@!
Sao bạn k giúp người ta đi, ngồi đấy cmt kiểu khinh thường người khác vậy?
Ngoài ra code bạn kia chả sai cái quái gì cả
Em build ok roi anh, nhung ket’ qua thi lai … sai
Ma vi sao phai them
-lm
the’ a ?P/S: Cho e hoi? lam` sao de set Sublime lam’ default editor the’ a ? Moi lan’ mo file.c la no hien tren gedit ko a’
Vì thư viện math.h chỉ chứa các khai báo thôi, còn các implementation của các hàm trong đấy thì nó nằm ở thư viện
libm.so
. Để link lại thì đặt thêm flag-lm
phía sau. Kết quả thì bạn xem lại thuật toán là được mà.Set sublime làm default editor bạn có thể tham khảo bài này: http://superuser.com/questions/704046/change-default-text-editor-to-sublime-text-in-linux-mint
Hi OniRanger.
Bạn có thể giúp người khác một lần hai lần đâu thể giúp được cả đời.
Mình cũng không kinh thường ai cả vì không ai có quyền phán xét người khác.
Hi Long Dragon.
Bạn có thể xem log và nhận ra lỗi.
Sau đó chỉ cần copy lỗi đó và tìm trên GG.
Ngay link đầu tiên (Với một số lỗi dị thì có thể tham khảo thêm vài link nữa.)
Sau đó dọc một lúc bạn sẽ thấy có comment
‘‘If you read the man-page for sqrt, you will note that it states to link with -lm’’
Lên GG tìm “sqrt man page”.
VD https://www.mankier.com/3/sqrt.
Khi đó bạn có tài liệu chi tiết của hàm các giá trị trả về mây và mây mây…
Đọc đến cuối trang có danh sách các hàm tương tự.
cbrt(3), exp(3), exp10(3), exp2(3), glutSolidDodecahedron(3), glutWireDodecahedron(3), gmx-editconf(1), hypot(3), log(3), log10(3), log2(3), pow(3).
Khi đó nếu sau này gặp lỗi
undefined reference to `log()’ thì bạn cũng biết cách giải quyết mà không cần lại phải đi hỏi nữa.
@Phong_Ky_Vo Uhm, ky nang search cua e van chua tot’ lam’
@freedom vay tai sao cac’ IDE khac’ lai ko bi loi nay a ?
Ma` e ko the set sublime thanh default editor duoc vi file defaults.list chi read-only
Nếu bạn code như vậy thì thay bằng i*i <= n luôn đỡ phải dùng hàm sqrt, chứ còn muốn tính căn 2 của n thì nên tính ở ngoài trước vòng lặp thì tốt hơn. Với lại bạn check một số int thì làm i <= n/2 cho đơn giản số int thì giới hạn của nó cũng cỡ 2 tỉ mấy thôi cho unsigned luôn là 4 tỉ hơn.
Có thể trình linker của các IDE đó mặc định đã có flag
-lm
rồi.defaults.list chỉ read-only với group owner và others thôi, owner có quyền read-write mà. Nên bài viết đó mới mở file defaults.list với
sudo
. Mình ko cài sublime nên ko kiểm tra được, bạn thử lại theo hướng dẫn đó xem.n/2 thì quá lâu ấy chứ. Còn “đỡ phải dùng”?
math.h
nó là thư viện chuẩn thì có j mà phải sợ.Khi em
sudo ...
toi defaults.list thi no bao:bash: cd: defaults.list: Not a directory
=> Phai fix sao anh ?cd
là change directory, từ thư mục hiện hành tới 1 thư mục nào đó. defaults.list là 1 file, không thể cd tới 1 file được. Bạn làm theo bài hướng dẫn đi, bắt đầu bằngsudo subl /usr/share/applications/defaults.list
. Trong đósubl
là sublime text,/usr/share/applications/defaults.list
là đường dẫn tới file defaults.list. Sau đó bạn thay thếgedit
bằngsublime_text
rồi save, reboot lại.Hi Long Dragon.
Bạn cứ từ từ dành thời gian tìm hiểu hệ thống linux của mình đã. @_@!
Mình không nhớ rõ thì nautilus cũng có chọn công cụ mở file mặc định thì phải.
He he với thời gian search google khắc phục cái lỗi kia thì mình mới làm như vậy. Bạn này gọi hàm sqrt trong mỗi loop thì đổi sang i*i <= n cũng thế. Còn chuyện N/2 lâu là tất nhiên nhưng bù lại thì nó tính đơn giản vì chỉ shift right 1 thôi, mình có nói nó tối ưu đâu.
Làm như bạn thì cũng có cách là
(s+=i << 1 - 1) < n
(hằng đẳng thức) nhưngmath.h
là thư viện chuẩn mà ko cài vô cho biên dịch được thì là cả một vấn đề nhé.Còn chuyện gọi trước hay sau là chuyện ko nói ra thì ai sửa.