01/10/2018, 08:35
Sự khác nhau giữa Cross GCC và Linux GCC trong Eclipse trên Ubuntu
E mới download eclipse về để lập trình c/c++ trên linux thì trong lúc create project nó có hỏi chọn cross gcc hay linux gcc. Vậy thì điểm khác nhau giữa 2 thằng này là j ạ ? (e đoán mò là cross gcc biên dịch file chạy trên nhiều OS, còn linux gcc chỉ biên dịch file chạy trên linux, đúng ko nhỉ ? )
Bài liên quan
Khi lựa chon Linux gcc, eclipse sẽ sử dụng bộ dịch mặc định cài đặt trong hệ điều hành.
Đối với cross linux thì phải cài đặt đường dẫn tới bộ dịch tương ứng.
Bộ dịch tương ứng này có thể là phiên bản gcc cũ hơn, mới hơn mặc định hoặc là bộ dịch cho phép ta dịch file để chạy trên hệ điều hành khác
Ví dụ dịch file mã nguồn trên ubuntu nhưng file thực thi lại chạy trên raspbian (rpi)
Thế thì sao lúc chọn Linux gcc, khi em sử dụng đặc tả
%d
cho kiểulong long int
trên terminal thì nó báo lỗi ko chịu, còn trên eclipse thì nó vẫn chịu ạ ? (vì kiểulong long int
có đặc tả tương ứng là%lld
)Bạn hãy đưa ra ví dụ cụ thể đi, mình chưa hiểu ý bạn nói gì
Ví dụ như thế này,
Bây giờ em vào eclipse (dành cho C/C++ development, sử dụng linux gcc), gõ đoạn code sau:
thì eclipse vẫn compile & run bình thường, kết quả bằng 5.
Nhưng khi em dùng đoạn code đó build trên terminal (bằng lệnh
gcc *.c -o main && ./main
) thì nó báo lỗi đặc tả%d
ko thể dùng cho kiểulong long int
,%ld
cũng vô tác dụng mà phải để đặc tả%lld
thì terminal nó mới chịu và cho run cái file thực thi.Compiler mà terminal sử dụng cũng là gcc của linux (linux gcc) nhưng trong eclipse thì nó cho chạy, còn terminal thì nó lại ko cho chạy => ???
Mình không nghĩ là nó lỗi đâu. Có thể nó báo warning thôi vì nó phải ngầm định ép kiểu. Mình vẫn biên dịch bằng terminal mà những đoạn code nhỏ nhỏ như của bạn, ko có vấn đề gì cả đâu
Ukm, nhưng nếu warning thì sao em ko run đc thế a :((
Cái không chạy được nằm ở chuỗi lệnh: gcc *.c -o main && ./main của bạn
Ý nghĩa của chuỗi lệnh này là biên dịch ra file main, sau đó thực thi file main. Tuy nhiên do gcc đưa ra warning nên shell sẽ hiểu rằng lệnh biên dịch ko thành công => không thực thi tiếp lệnh ./main
Nếu bạn kiểm tra trong folder mà bạn biên dịch thì vẫn có file main được tạo ra. Bạn hãy thử tách chuỗi lệnh trên bằng hai lệnh riêng biệt:
ukm, thanks anh ^^
Mà cho em hỏi có người bảo là nên dùng thêm tham số
-Wall
, tức là:gcc *.c -o main -Wall && ./main
thì nghĩa là sao ạ ?Nghĩa là warning all, trình biên dịch sẽ đưa tất cả các warning nếu có