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ỉ ? )

PhamHai viết 10:38 ngày 01/10/2018

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)

Long Dragon viết 10:48 ngày 01/10/2018

eclipse sẽ sử dụng bộ dịch mặc định cài đặt trong hệ điều hành.

Thế thì sao lúc chọn Linux gcc, khi em sử dụng đặc tả %d cho kiểu long 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ểu long long int có đặc tả tương ứng là %lld)

PhamHai viết 10:38 ngày 01/10/2018

Bạn hãy đưa ra ví dụ cụ thể đi, mình chưa hiểu ý bạn nói gì

Long Dragon viết 10:40 ngày 01/10/2018

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:

#include <stdio.h>

int main()
{
     long long int x = 5;
     printf("%d", x); // chạy bình thường
     return 0;
}

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ểu long 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 => ???

PhamHai viết 10:50 ngày 01/10/2018

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

Long Dragon viết 10:40 ngày 01/10/2018

Ukm, nhưng nếu warning thì sao em ko run đc thế a :((

PhamHai viết 10:42 ngày 01/10/2018

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:

Long Dragon viết 10:37 ngày 01/10/2018

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 ạ ?

PhamHai viết 10:36 ngày 01/10/2018

Nghĩa là warning all, trình biên dịch sẽ đưa tất cả các warning nếu có

Bài liên quan
0