GTK+入门教程

article/2025/9/11 17:10:21

GTK+入门教程(一)

1. 显示一个窗口


#include <gtk/gtk.h>int main(int argc, char *argv[])
{GtkWidget *window;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_widget_show(window);g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);gtk_main();return 0;}

这个最基本的框架,语句含义如下:

//生成一个样式为GTK_WINDOW_TOPLEVEL的窗口
gtk_window_new(GTK_WINDOW_TOPLEVEL);//显示生成的这个窗口
gtk_widget_show(window);//将窗口的destroy消息绑定处理函数gtk_main_quit
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);// 进入消息循环。
gtk_main(); 

2. 窗口和图标

注意:与Windows不一样,GTK+的图标不需要单独的ICO文件;下面代码就是使用普通的png文件生成的图标。

#include <gtk/gtk.h>GdkPixbuf *create_pixbuf(const gchar * filename)
{GdkPixbuf *pixbuf;GError *error = NULL;pixbuf = gdk_pixbuf_new_from_file(filename, &error);if (!pixbuf){fprintf(stderr, "%s\n", error->message);g_error_free(error);}return pixbuf;
}int main(int argc, char *argv[])
{GtkWidget *window;   GdkPixbuf *icon;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window), "Icon");gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);icon = create_pixbuf("demo.png");gtk_window_set_icon(GTK_WINDOW(window), icon);gtk_widget_show(window);g_signal_connect(G_OBJECT(window), "destroy",       G_CALLBACK(gtk_main_quit), NULL);g_object_unref(icon);gtk_main();return 0;}

gtk_window_set_title,gtk_window_set_default_size,gtk_window_set_position 分别设置窗口的标题,窗口的初始长度和宽度,以及初始位置。gtk_window_set_icon设置程序的图标。

3. tooltip(提示信息)和ATL快捷操作


#include <gtk/gtk.h>void print_msg(GtkWidget *widget, gpointer window) {g_printf("Button clicked\n");
}int main(int argc, char *argv[])
{GtkWidget *window;   GtkWidget *button;   GtkWidget *halign;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window), "Mnemonic");gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);gtk_container_set_border_width(GTK_CONTAINER(window), 15);//button = gtk_button_new_with_label("Button");button =gtk_button_new_with_mnemonic("_Button");gtk_widget_set_tooltip_text(button, "Button widget");g_signal_connect(button, "clicked",        G_CALLBACK(print_msg), NULL);halign = gtk_alignment_new(0, 0, 0, 0);gtk_container_add(GTK_CONTAINER(halign), button);gtk_container_add(GTK_CONTAINER(window), halign);gtk_widget_show_all(window);g_signal_connect(G_OBJECT(window), "destroy",       G_CALLBACK(gtk_main_quit), NULL);gtk_main();return 0;}

采用gtk_button_new_with_label生成的button不会响应ATL键,也不会将“_”解释为添加下划线。要实现下划线和响应ATL的功能,需要使用gtk_button_new_with_mnemonic函数。函数gtk_widget_set_tooltip_text添加tooltip。

g_signal_connect(button, "clicked",        G_CALLBACK(print_msg), NULL);给控件button添加了处理消息"clicked"的回调函数print_msg。

gtk_alignment_new 和gtk_container_add设置layout布局的函数,下一节会详细介绍。

4. 菜单操作

4.1 添加1个菜单


#include <gtk/gtk.h>int main(int argc, char *argv[])
{GtkWidget *window;GtkWidget *vbox;GtkWidget *menubar;GtkWidget *fileMenu;GtkWidget *fileMi;GtkWidget *quitMi;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);gtk_window_set_title(GTK_WINDOW(window), "Simple menu");vbox = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(window), vbox);menubar = gtk_menu_bar_new();fileMenu = gtk_menu_new();fileMi = gtk_menu_item_new_with_label("File");quitMi = gtk_menu_item_new_with_label("Quit");gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu);gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi);gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi);gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);g_signal_connect(G_OBJECT(window), "destroy",         G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(G_OBJECT(quitMi), "activate",         G_CALLBACK(gtk_main_quit), NULL);gtk_widget_show_all(window);gtk_main();return 0;}


4.2 使用子菜单


#include <gtk/gtk.h>int main(int argc, char *argv[])
{GtkWidget *window;   GtkWidget *vbox;GtkWidget *menubar;GtkWidget *fileMenu;GtkWidget *imprMenu;GtkWidget *sep;GtkWidget *fileMi;GtkWidget *imprMi;GtkWidget *feedMi;GtkWidget *bookMi;GtkWidget *mailMi;GtkWidget *quitMi;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);gtk_window_set_title(GTK_WINDOW(window), "Submenu");vbox = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(window), vbox);menubar = gtk_menu_bar_new();fileMenu = gtk_menu_new();fileMi = gtk_menu_item_new_with_label("File");imprMenu = gtk_menu_new();imprMi = gtk_menu_item_new_with_label("Import");feedMi = gtk_menu_item_new_with_label("Import news feed...");bookMi = gtk_menu_item_new_with_label("Import bookmarks...");mailMi = gtk_menu_item_new_with_label("Import mail...");gtk_menu_item_set_submenu(GTK_MENU_ITEM(imprMi), imprMenu);gtk_menu_shell_append(GTK_MENU_SHELL(imprMenu), feedMi);gtk_menu_shell_append(GTK_MENU_SHELL(imprMenu), bookMi);gtk_menu_shell_append(GTK_MENU_SHELL(imprMenu), mailMi);sep = gtk_separator_menu_item_new();quitMi = gtk_menu_item_new_with_label("Quit");gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu);gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), imprMi);gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), sep);gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi);gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi);gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);g_signal_connect(G_OBJECT(window), "destroy",         G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(G_OBJECT(quitMi), "activate",         G_CALLBACK(gtk_main_quit), NULL);gtk_widget_show_all(window);gtk_main();return 0;}


4.3 弹出式菜单


 #include <gtk/gtk.h>int show_popup(GtkWidget *widget, GdkEvent *event)
{const gint RIGHT_CLICK = 3;if (event->type == GDK_BUTTON_PRESS){GdkEventButton *bevent = (GdkEventButton *) event;if (bevent->button == RIGHT_CLICK){gtk_menu_popup(GTK_MENU(widget), NULL, NULL, NULL, NULL,               bevent->button, bevent->time);}return TRUE;}return FALSE;
}int main(int argc, char *argv[])
{GtkWidget *window;GtkWidget *ebox;GtkWidget *pmenu;GtkWidget *hideMi;GtkWidget *quitMi;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);gtk_window_set_title(GTK_WINDOW(window), "Popup menu");ebox = gtk_event_box_new();gtk_container_add(GTK_CONTAINER(window), ebox);pmenu = gtk_menu_new();hideMi = gtk_menu_item_new_with_label("Minimize");gtk_widget_show(hideMi);gtk_menu_shell_append(GTK_MENU_SHELL(pmenu), hideMi);quitMi = gtk_menu_item_new_with_label("Quit");gtk_widget_show(quitMi);gtk_menu_shell_append(GTK_MENU_SHELL(pmenu), quitMi);g_signal_connect_swapped(G_OBJECT(hideMi), "activate",        G_CALLBACK(gtk_window_iconify), GTK_WINDOW(window));g_signal_connect(G_OBJECT(quitMi), "activate",        G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(G_OBJECT(window), "destroy",       G_CALLBACK(gtk_main_quit), NULL);g_signal_connect_swapped(G_OBJECT(ebox), "button-press-event",        G_CALLBACK(show_popup), pmenu);gtk_widget_show_all(window);gtk_main();return 0;
}


4.4 图像菜单和快捷键


#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>int main(int argc, char *argv[])
{GtkWidget *window;GtkWidget *vbox;GtkWidget *menubar;GtkWidget *fileMenu;GtkWidget *fileMi;GtkWidget *newMi;GtkWidget *openMi;GtkWidget *quitMi;GtkWidget *sep;GtkAccelGroup *accel_group = NULL;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);gtk_window_set_title(GTK_WINDOW(window), "Images");vbox = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(window), vbox);menubar = gtk_menu_bar_new();fileMenu = gtk_menu_new();accel_group = gtk_accel_group_new();gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);fileMi = gtk_menu_item_new_with_mnemonic("_File");newMi = gtk_image_menu_item_new_from_stock(GTK_STOCK_NEW, NULL);openMi = gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, NULL);sep = gtk_separator_menu_item_new();quitMi = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group);gtk_widget_add_accelerator(quitMi, "activate", accel_group,        GDK_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu);gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), newMi);gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), openMi);gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), sep);gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi);gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi);gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);g_signal_connect(G_OBJECT(window), "destroy",       G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(G_OBJECT(quitMi), "activate",       G_CALLBACK(gtk_main_quit), NULL);gtk_widget_show_all(window);gtk_main();return 0;
}

4.5 使用工具条


#include <gtk/gtk.h>int main(int argc, char *argv[])
{GtkWidget *window;GtkWidget *vbox;GtkWidget *toolbar;GtkToolItem *newTb;GtkToolItem *openTb;GtkToolItem *saveTb;GtkToolItem *sep;GtkToolItem *exitTb;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);gtk_window_set_title(GTK_WINDOW(window), "toolbar");vbox = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(window), vbox);toolbar = gtk_toolbar_new();gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);newTb = gtk_tool_button_new_from_stock(GTK_STOCK_NEW);gtk_toolbar_insert(GTK_TOOLBAR(toolbar), newTb, -1);openTb = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);gtk_toolbar_insert(GTK_TOOLBAR(toolbar), openTb, -1);saveTb = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);gtk_toolbar_insert(GTK_TOOLBAR(toolbar), saveTb, -1);sep = gtk_separator_tool_item_new();gtk_toolbar_insert(GTK_TOOLBAR(toolbar), sep, -1);exitTb = gtk_tool_button_new_from_stock(GTK_STOCK_QUIT);gtk_toolbar_insert(GTK_TOOLBAR(toolbar), exitTb, -1);gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 5);g_signal_connect(G_OBJECT(exitTb), "clicked",          G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(G_OBJECT(window), "destroy",         G_CALLBACK(gtk_main_quit), NULL);gtk_widget_show_all(window);gtk_main();return 0;
}


4.6 复选框样式菜单和状态条


#include <gtk/gtk.h>void toggle_statusbar(GtkWidget *widget, gpointer statusbar)
{if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))){gtk_widget_show(statusbar);}else{gtk_widget_hide(statusbar);}
}int main(int argc, char *argv[])
{GtkWidget *window;GtkWidget *vbox;GtkWidget *menubar;GtkWidget *viewmenu;GtkWidget *view;GtkWidget *tog_stat;GtkWidget *statusbar;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);gtk_window_set_title(GTK_WINDOW(window), "GtkCheckMenuItem");vbox = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(window), vbox);menubar = gtk_menu_bar_new();viewmenu = gtk_menu_new();view = gtk_menu_item_new_with_label("View");tog_stat = gtk_check_menu_item_new_with_label("View statusbar");gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tog_stat), TRUE);gtk_menu_item_set_submenu(GTK_MENU_ITEM(view), viewmenu);gtk_menu_shell_append(GTK_MENU_SHELL(viewmenu), tog_stat);gtk_menu_shell_append(GTK_MENU_SHELL(menubar), view);gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);statusbar = gtk_statusbar_new();gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, TRUE, 0);g_signal_connect(G_OBJECT(window), "destroy",         G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(G_OBJECT(tog_stat), "activate",          G_CALLBACK(toggle_statusbar), statusbar);gtk_widget_show_all(window);gtk_main();return 0;
}


4.7 简单的重复和撤销操作

#include <gtk/gtk.h>void undo_redo(GtkWidget *widget,  gpointer item)
{static gint count = 2;const gchar *name = gtk_widget_get_name(widget);if (g_strcmp0(name, "undo") ){count++;}else{count--;}if (count < 0){gtk_widget_set_sensitive(widget, FALSE);gtk_widget_set_sensitive(item, TRUE);}if (count > 5){gtk_widget_set_sensitive(widget, FALSE);gtk_widget_set_sensitive(item, TRUE);}
}int main(int argc, char *argv[])
{GtkWidget *window;GtkWidget *vbox;GtkWidget *toolbar;GtkToolItem *undo;GtkToolItem *redo;GtkToolItem *sep;GtkToolItem *exit;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);gtk_window_set_title(GTK_WINDOW(window), "Undo redo");vbox = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(window), vbox);toolbar = gtk_toolbar_new();gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);gtk_container_set_border_width(GTK_CONTAINER(toolbar), 2);undo = gtk_tool_button_new_from_stock(GTK_STOCK_UNDO);gtk_widget_set_name(GTK_WIDGET(undo), "undo");gtk_toolbar_insert(GTK_TOOLBAR(toolbar), undo, -1);redo = gtk_tool_button_new_from_stock(GTK_STOCK_REDO);gtk_toolbar_insert(GTK_TOOLBAR(toolbar), redo, -1);sep = gtk_separator_tool_item_new();gtk_toolbar_insert(GTK_TOOLBAR(toolbar), sep, -1);exit = gtk_tool_button_new_from_stock(GTK_STOCK_QUIT);gtk_toolbar_insert(GTK_TOOLBAR(toolbar), exit, -1);gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);g_signal_connect(G_OBJECT(undo), "clicked",          G_CALLBACK(undo_redo), redo);g_signal_connect(G_OBJECT(redo), "clicked",          G_CALLBACK(undo_redo), undo);g_signal_connect(G_OBJECT(exit), "clicked",          G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(G_OBJECT(window), "destroy",         G_CALLBACK(gtk_main_quit), NULL);gtk_widget_show_all(window);gtk_main();return 0;
}


下一篇: GTK+中的布局




http://chatgpt.dhexx.cn/article/box4Ff7y.shtml

相关文章

学习使用GTK+

学习使用GTK 0.概述 原文地址&#xff1a;http://blog.programet.org/2010/08/gtk-0.html GTK是当下流行的图形界面库之一&#xff0c;使用GTK可以方便地构造出应用程序界面。叶子觉得GTK很好用&#xff0c;在这里推荐给大家&#xff0c;并留下自己的一些使用心得。希望你也喜欢…

GTK+:GTK+的简介、安装、使用方法之详细攻略

GTK&#xff1a;GTK的简介、安装、使用方法之详细攻略 目录 GTK的简介 1、GTK特点 GTK的安装 1、基于Windows平台安装 第一步、下载GTK 第二步、安装GTK 第三步、加载系统环境变量 第四步、运行命令测试 第五步、利用python预测测试 GTK的使用方法 1、C语言实现 2、…

【Linux】特别篇--GTK界面设计

【Linux】特别篇--GTK界面设计 一、GTK界面常用函数1、控件大小设置2、创建窗口3、创建控件&#xff08;1&#xff09;标签label&#xff08;2&#xff09;按键button&#xff08;3&#xff09;行辑器 二、GTK常用布局方法1、布局的使用方法&#xff08;以水平布局为例&#xf…

GTK入门教程

GTK入门教程 1.GTK简介 GTK&#xff08;GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的&#xff0c;已成为一个功能强大、设计灵活的一个通用图形库&#xff0c;是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。当然&#xff0c;…

gtk学习总结:GTK从入门到放弃,三天包教包会

今天花了一些时间复习之前学习过的gtk&#xff0c;感觉东西光学不用忘得好快啊&#xff0c;在这做个之前学过的内容的备份&#xff0c;希望对大家有用&#xff0c;也希望大家不要从入门到放弃。文中有些代码例子可能来自《GTK从入门到精通》吧&#xff0c;我不记得了&#xff0…

gcc下载地址

网上看到有提供的http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/&#xff0c;可以打开&#xff0c;但是下载太慢了 这里记录一个下载很快的地址https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/&#xff0c;为清华大学的开源镜像网站 想要找其他的开源软件&#xff0c;…

如何安装GCC

现在的CentOs8上没有自带的gcc编译器因此需要下载&#xff08;注意&#xff1a;这里的下载是指在虚拟机中下载&#xff0c;不是指在电脑上下载&#xff09; 若运行gcc时出现appstream 下载元数据失败则表明没有安装gcc。 1 首先需要获得root权限**** 在终端模式下输入su&…

arm-Linux-gcc交叉编译器和gcc编译器的下载地址

1.arm-none-linux-gnueabi-gcc下载 http://www.veryarm.com/arm-none-linux-gnueabi-gcc arm-none-Linux-gnueabi-gcc是 Codesourcery 公司&#xff08;目前已经被Mentor收购&#xff09;基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM系统中所有环节的代码&#xff0c;包…

Windows中安装GCC教程

GCC的安装教程 GCC简介 GCC编译器通常在Linux系统下使用&#xff0c;一般来说大部分发行的系统会默认安装&#xff0c;GCC编译器使用gcc指令在终端进行shell操作。 对于新接触Linux的朋友来说&#xff0c;简单的在Windows中练习过渡一下应该就足够了。&#xff08;我就是因为…

windows下安装gcc编译器(c/c++/fortran)

首先下载MinGW - Minimalist GNU for Windows 下载结束后双击&#xff0c;点击下一步即可&#xff0c; 然后勾选要安装的组件&#xff1a; 点击应用&#xff1a; 开始安装&#xff08;这一步要经过漫长的下载过程&#xff0c;请耐心等待&#xff09;&#xff1a; 修改环境变量…

软件安装 gcc编译器

rpm命令及各参数使用。针对所有已安装的软件建立一个本地软件数据库&#xff0c;作为后续软件升级和卸载的依据本地软件数据库保存在目录/var/lib/rpm中 yum命令及各参数应用可以把本地计算机作为本地YUM源&#xff0c;也可以配置一个网络YUM源 YUM源&#xff1a;包含整理好的…

在线c++编译器(gcc)

这几年c标准委员会活跃起来&#xff0c;c11、14标准相续推出。对于想尝鲜又怕麻烦&#xff08;visual studio 更新慢&#xff0c;对标准的支持力度也不够。对于使用gcc的&#xff0c;替换系统的gcc版本或者安装个mingw也挺费事&#xff09;的人来说&#xff0c;可以优先考虑在线…

GCC编译器介绍

GCC是一套由GNU开发的编程语言编译器&#xff0c;在Linux系统下可以用它调用其他不同的工具进行预处理、编译、汇编、链接这样的工作&#xff0c;其执行效率比一般编译器高20%~30%。由于它是GNU项目之一&#xff0c;是开源的软件&#xff0c;我们可以直接从网上免费地下载安装它…

Window10-MinGW下载安装gcc,g++编译器

文章目录 完成流程步骤&#xff1a;出现的问题&#xff1a; 完成流程步骤&#xff1a; 1.MinGW下载 MinGW官网 mingw-get-setup.exe下载地址 2.MinGW安装 打开下载好的mingw-get-setup.exe &#xff0c;这里选择安装目录为F:\MinGW。 3.下载安装gcc/g ​ 通过MinGW Insta…

gcc官网以及各个版本下载地址

gcc的官网&#xff1a; http://gcc.gnu.org/ gcc镜像站点&#xff1a; https://gcc.gnu.org/mirrors.html 例如点 Japan的链接 到japan站点下载

GCC编译器 MinGW的下载安装使用教程

哎 总所周知 gcc可以用来编译C 和C。在linux广泛应用&#xff0c;那么window怎么使用gcc呢。 就要用到gcc的window工具----MInGW&#xff0c;安装好之后&#xff0c;直接可以在windows的dos界面编译。 下面讲解安装使用过程。 1.官网下载 MinGW - Minimalist GNU for Windows d…

APK反编译工具及方法

文章目录 一、下载工具apktooldex2jarjd-gui 二、APK反编译方法方法一&#xff1a;Apktool方法二&#xff1a;dex2jar jd-gui 三、APK文件的基本结构 一、下载工具 apktool apktool&#xff1a;资源文件获取&#xff0c;可以提取出图片文件和布局文件进行使用查看。 点击下载…

IDEA反编译Jar包

一.安装Java Bytecode Decomplier插件 (1) File–>Settings–>Plugins &#xff0c;搜索 Java Bytecode Decomplier 插件 (2) 查看安装插件的路径 File->Import Setting 注意&#xff1a;如果你的插件里面搜不到 Java Bytecode Decomplier&#xff0c;但是能搜到…

反编译jar包

问题描述&#xff1a; 前提说明&#xff1a;反编译别人的程序&#xff0c;是不推荐的&#xff0c;毕竟不太好&#xff0c;有可能涉及保密。 有时是没有办法而为之&#xff0c;原程序的开发工程师离职了&#xff0c;新的接口人业务不了解&#xff0c;但是也没有办法提供源码&…

反编译技术完全解析

1.前言 作为一个Android 程序猿,如果没有反编译过别人的apk&#xff0c;那有可能你是个假的程序猿~我们反编译别人apk可能是想看看别人优美的界面是怎么写的&#xff0c;或者是去获取别人的资源文件&#xff0c;又或者是看看某个功能是怎么实现的。记得在大学里&#xff0c;参…