Câu hỏi Làm cách nào để sử dụng thư viện phát triển GTK + trong Ubuntu?


Tôi đã lập trình được khoảng một năm rưỡi trên Windows và tôi mới bắt đầu quen với cách mọi thứ hoạt động trên nền tảng đó, nhưng bây giờ tôi quan tâm đến việc phát triển trên Linux và tôi đã có một thời gian khó khăn làm quen với công việc, thiếu IDE, và biên dịch dòng lệnh với GCC. Tôi đang chạy Xubuntu 13,10 64bit, nhân tiện ..

Để kiểm tra các vùng biển, tôi đã làm những gì nhiều người làm và viết một chương trình C ++ 'hello world' nhanh chóng.

#include <iostream>

int main()
{
    std::cout << "Hello!\n";
    return 0;
}

Vấn đề đầu tiên của tôi là; chương trình này dường như có một lỗi biên dịch khi tôi cố gắng biên dịch nó bằng cách sử dụng GCC, nhưng nó biên dịch tốt khi tôi sử dụng trình biên dịch G ++:

gcc hello.cpp -o hello
/tmp/ccbmUmzf.o: In function `main':
hello.cpp:(.text+0xa): undefined reference to `std::cout'
hello.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/ccbmUmzf.o: In function `__static_initialization_and_destruction_0(int, int)':
hello.cpp:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()'
hello.cpp:(.text+0x4c): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

Điều gì đang xảy ra ở đây, GCC không nhận ra rằng mã của tôi là C ++ hay gì đó?

Vấn đề thứ hai của tôi là cố gắng sử dụng các thư viện: Tôi đã ấn tượng rằng các thư viện phát triển GTK + 3.0 đi kèm với (X) ubuntu, nhưng khi tôi cố gắng làm theo hướng dẫn đơn giản đây, tôi nhận được lỗi sau từ G ++:

g++ hello.cpp -o hello
hello.cpp:1:21: fatal error: gtk/gtk.h: No such file or directory
 #include <gtk/gtk.h>
                     ^
compilation terminated.

Vì vậy, sau đó, tôi giải thích rằng có nghĩa là các thư viện cho GTK + 3.0 không được cài đặt .. Vì vậy, tôi đã kiểm tra apt-get, và tôi đã không thực sự thấy bất cứ điều gì trông giống như những gì tôi cần .. Tôi có phải xây dựng GTK +3.0 từ nguồn, hoặc là có một số PPA một nơi nào đó mà tôi cần ??

Tôi biết rằng rất nhiều người thề do luồng công việc phát triển GNU / Linux, nhưng với tư cách là một người được sử dụng để làm việc trong Visual Studio, tôi thấy quá trình này hơi đục và không trực quan. Ngay bây giờ tôi đang sử dụng Mousepad trên Xubuntu để chỉnh sửa mã của tôi, và trong khi nó có cú pháp mã hóa màu sắc, nó dường như làm rất ít ngoài đó. Tôi biết rằng cuối cùng tôi sẽ phải đối phó với nhiều tập tin và tạo ra makefiles và, vào thời điểm này, tôi đang dreading nó!

Bất cứ điều gì giúp bạn có thể cung cấp cho một lập trình viên mới và tổng số Linux / GNU noob là rất hoan nghênh!


4
2017-12-06 04:50


gốc




Các câu trả lời:


Khuyên bảo

Trước hết, bạn không phải giải quyết không có IDE. Cài đặt Eclipse, nó có sẵn trong Trung tâm phần mềm Ubuntu. Bạn cũng muốn cài đặt CDT cho Eclipse cung cấp cho bạn sự hỗ trợ C / C ++. Thứ hai tôi muốn khuyên bạn nên tập trung vào C ++ và Qt thay vì C và GTK. Qt là một khung công tác đa nền tảng tuyệt vời sử dụng C ++ và QML (ngôn ngữ giống như JavaScript cho giao diện người dùng) và Ubuntu đang ngày càng hướng tới việc sử dụng Qt cho tương lai cho máy tính để bàn và thiết bị di động. Những công cụ này sẽ cho phép bạn không chỉ tạo ra các ứng dụng đẹp cho máy tính để bàn Ubuntu mà còn cho Android, Windows, Mac, BlackBerry và các hệ điều hành khác. Một IDE đặc biệt Qt tuyệt vời là QtCreator, cũng có sẵn trong Trung tâm phần mềm Ubuntu, bạn nên kiểm tra nó cùng một số hướng dẫn Qt.

Câu trả lời

Để trả lời bạn câu hỏi trực tiếp, mặc dù tôi khuyên bạn nên làm những gì tôi đã nêu ở trên, bạn có thể cần các phiên bản -dev của các thư viện bạn sử dụng. Đối với GTK 3, bạn có thể phải:

sudo apt-get install libgtk-3-dev

Điều đó sẽ giúp bạn có được tất cả các tiêu đề GTK 3.


4
2017-12-06 05:06



Tôi sẽ thừa nhận, tôi biết về Qt, và tôi đã quyết định thử GTK + phần nào tùy ý! Lý do của tôi là, với tư cách là một người dùng Xubuntu, tôi nghĩ GTK có thể đã được cài đặt do nó phụ thuộc vào XFCE (trừ khi tôi bị nhầm lẫn). Ngoài ra, trong khi GTK là một thư viện C, nó cũng không hoạt động với các chương trình C ++? Tôi không muốn điều này trở thành một cuộc chiến tranh GTK vs Qt, tôi chắc chắn cả hai đều tuyệt vời, nhưng tại thời điểm này tôi chỉ đang cố gắng chọn một và làm cho nó hoạt động! - Ngoài ra, đề xuất Eclipse là một cái gì đó để xem xét, chắc chắn ..:] - MrKatSwordfish
Nhìn vào chỉnh sửa của tôi. GTK là một phụ thuộc, nhưng đối với các ứng dụng để làm việc, chỉ có phần nhị phân là cần thiết. Những gì bạn cần để biên dịch là các tiêu đề, mà đi kèm trong một gói riêng biệt - thường là tên thư viện với -dev ở cuối. Tôi có cảm giác bạn đã lựa chọn thay vì tùy ý từ câu hỏi của bạn, đó là lý do tại sao tôi cho phép bản thân mình đưa ra cho bạn một số hướng. Bạn có thể sử dụng GTK với C ++ nhưng bạn phải sử dụng một thư viện khác trừ khi bạn muốn xử lý rất nhiều C xấu xí trong C ++. Tôi nghĩ GTKmm của nó. Điều đó nói rằng, Qt là rất nhiều di động, được viết bằng C + + và có một ngôn ngữ tuyệt vời cho giao diện người dùng. - Nicolay Doytchev
Tôi muốn nói - hãy thử một số công cụ giao diện người dùng đơn giản trong cả hai và tạo nên suy nghĩ của bạn, đánh giá khả năng tái sử dụng mã tiềm năng mà bạn có thể thực hiện trên các nền tảng. Chắc chắn thử QtCreator. - Nicolay Doytchev
Cài đặt libgtk-3-dev làm việc như một sự quyến rũ, cảm ơn! Tất nhiên nó sẽ đơn giản như vậy; các thư viện thời gian chạy ở đó nhưng không có tiêu đề, tôi hiểu. Vẫn khó tìm được thứ tôi cần (và những gì tôi đã cài đặt) bằng APT, nhưng đó là câu hỏi cho một lần khác .. Tôi đã đọc rất nhiều điều tuyệt vời về Qt, và tôi chắc chắn sẽ thử ! Cảm ơn câu trả lời đơn giản, hiệu quả VÀ lời khuyên / ý kiến ​​trung thực, lightrush! - MrKatSwordfish
Ngoài ra, bạn sẽ không xảy ra bất kỳ ý tưởng tại sao tôi có vấn đề đó với GCC vs G ++ ở đầu câu hỏi của tôi, phải không? Tôi đoán nó có cái gì để làm với thư viện chuẩn C ++ không được bao gồm một cách chính xác khi chạy qua GCC, nhưng tôi không chắc chắn .. Bất kỳ ý tưởng? - MrKatSwordfish