2013-02-18 37 views
5

Tôi đã tìm kiếm và tìm kiếm nhưng tôi không nhận được thông tin tôi thực sự muốn. Ai đó có thể giải thích, hoàn toàn và cơ bản nhất có thể, cách mã Gtk + được biên dịch khi viết bằng C, sử dụng GCC, trên Linux. Có những thứ như backticks, "c99" và .o các tệp mà tôi không hiểu chút nào.Làm thế nào để biên dịch C và Gtk + với GCC trên Linux?

Tôi cũng đánh giá cao mọi tài nguyên để tìm hiểu mã Gtk +. Tất cả các nguồn tôi đã tìm thấy là dành cho các phiên bản 2.x, nhưng tôi nghĩ 3.6 là phiên bản hiện tại.

Tôi muốn nhắc lại, tôi chỉ quan tâm đến mã C. Xin đừng cố gắng giải thích cho tôi những lợi ích của C++ hoặc C#, tôi đã đọc tất cả chúng. Tôi ở đây vì C. Cảm ơn bạn!

+2

Tôi sợ câu hỏi này quá rộng và kết hợp các chủ đề khác nhau. Biên dịch mã C trên Unix là một chủ đề trong chính nó. Biên dịch mã Gtk chỉ là một phiên bản cụ thể của hoạt động đó. Bạn có lẽ chỉ nên chọn một cuốn sách giới thiệu về C. Biên dịch mã Gtk sẽ trở nên rõ ràng sau đó. – pmr

+2

Câu hỏi này hoàn toàn hợp lệ, nhưng tôi không thể tin rằng ai đó không thể nhận được thông tin thực sự cơ bản này: http://www.google.com/search?q=compiling+gtk trả lại tài liệu cho GTK + 2 ở dòng đầu tiên và cho GTK + 3 cái thứ hai. – ntd

Trả lời

15

Để bắt đầu, bạn viết mã C của bạn, nói "hello_world_gtk.c", và sau đó bạn biên dịch và liên kết nó với Gtk, bằng cách sử dụng trình biên dịch thích hợp và cờ liên kết. Những cờ này được cung cấp cho bạn bởi công cụ pkg-config. Để có được những lá cờ biên dịch cần thiết, bạn gọi đó là công cụ với:

 
pkg-config gtk+-2.0 --cflags 

Đối với những lá cờ liên kết:

 
pkg-config gtk+-2.0 --libs 

Các backticks cho phép bạn để có được sản lượng từ pkg-config và vượt qua nó vào như các đối số thành gcc:

 
gcc `pkg-config gtk+-2.0 --cflags` hello_world_gtk.c -o hello_world_gtk `pkg-config gtk+-2.0 --libs` 

Nhưng bạn không bắt buộc phải sử dụng dấu gạch chéo ngược. Bạn chỉ có thể sao chép & dán cờ theo cách thủ công nếu muốn.

Đối với Gtk 3, thay thế "2.0" bằng "3.0". Nếu pkg-config báo cáo rằng nó không thể tìm thấy gói, thì bạn đã không cài đặt gói phát triển Gtk như được cung cấp bởi bản phân phối Linux của bạn.

Nếu bạn thường không hiểu cách bạn biên dịch một thứ gì đó thành tệp đối tượng và sau đó liên kết nó, thì bạn không nên bắt đầu bằng Gtk, nhưng thay vào đó là bằng chữ C. Một khi bạn đã quen thuộc với những điều cơ bản tuyệt đối về biên dịch và liên kết, thì bạn có thể chuyển sang các ứng dụng Gtk.

+0

Tôi đã biên dịch và chạy, Đã xảy ra sự cố với cài đặt của tôi. Mặc dù tôi chỉ có thể cài đặt 2.0, không phải phiên bản 3.x. –

2

Như những người khác đã nói, câu hỏi của bạn quá rộng. Nó hỏi về backticks (cú pháp vỏ cơ bản), những gì ".o" tập tin là (lập trình cơ bản), và lập trình GTK (phần nào lập trình nâng cao).

Nhưng để trả lời nó tốt nhất mà tôi có thể, và giả sử bạn chỉ có một tập tin nguồn duy nhất, sử dụng

gcc -Wall -Wextra -std=c99 `pkg-config --cflags --libs gtk+-2.0` example.c -o example 

nơi "example.c" là tên của nguồn của bạn. Dưới đây là bảng phân tích:

  • Sử dụng cờ "-Wall" và "-Wextra" để bạn có thể xem tất cả cảnh báo (và khắc phục).

  • Sử dụng cờ "std" để đặt phương ngữ C của bạn. Có một số và gcc có hỗ trợ toàn bộ hoặc một phần cho hầu hết trong số chúng. Đọc trang hướng dẫn hoặc trang thông tin để biết thêm thông tin. Sử dụng "c99" như trên không phải là một lựa chọn tồi.

  • Và sử dụng pkg-config và thay thế lệnh (tức là, backticks) để đặt thư viện và bao gồm. Lưu ý rằng bạn có thể thực hiện cả hai cùng một lúc, mặc dù nhiều người sử dụng nó hai lần bằng hai phiên bản pkg-config đã được trả về. Backticks thay thế đầu ra từ lệnh trong các dấu tick. Hãy thử chạy pkg-config trong backquotes của chính nó trên dòng lệnh và bạn sẽ thấy nó làm gì.

Rất tiếc, không có nhiều tài nguyên cho mã GTX 3.x và phần lớn vẫn là 2.x. Bạn sẽ chỉ phải sử dụng danh sách gửi thư gtk hoặc tài liệu tham khảo.

Đối với GTK 3.x, lý do bạn không thể biên dịch cho nó có khả năng phân phối của bạn là GTK 2.x dựa. Các bản phân phối mới hơn có thể có GTK 3.x trong bản repo của chúng.

0

My Makefile:

LDLIBS = -lcurl -lpthread `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` 
+0

đẹp, cũng hoạt động với gtk 3.0: LDLIBS = -lcurl -lpthread 'pkg-config - thẻ nhớ gtk + -3.0'' pkg-config --libs gtk + -3.0' – petermeissner

Các vấn đề liên quan