GCC 编译 Windows API 程序

本文介绍如何在Windows系统中使用GCC编译器进行可视化程序设计,包括安装msys2、toolchain以及编写、编译、运行简单的Hello World程序。详细步骤和注意事项也在此文中有所体现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这学期学可视化程序设计,要使用 Windows API 绘制界面,由于笔者的笔记本硬盘太小,无法装臃肿的 VS(主要是不想装),也不想用 VC++ 6.0,所以就选用 GCC 来编译。

安装 msys2

下面为 64 位操作系统版本的 msys2 下载地址:

http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20180531.exe

下载完成后,像普通软件一样安装即可。

安装 toolchain

安装完成后,在开始菜单下会有如下目录结构:

|- \MSYS2
  |- MSYS2 MinGW 32bit
  |- MSYS2 MinGW 64bit
  |- MSYS2 MSYS

关于三这区别参考这篇博文,安装 toolchain 选择哪个都行,但以后编译一定选择 MSYS2 MinGW 64/32bit,不然会提示命令找不到(主要原因是提供 MinGW 环境)。

选择三者其中一个打开 bash , 输入下面命令安装 toolchain :

pacman -S mingw-w64-x86_64-toolchain

编译第一个程序

编写一个内容如下的 hello world 源程序文件,接着切换到文件保存路径,然后输入命令 gcc hello.c (用 c++ 语言能否编写及怎么编写还未弄清)就会生成 a.exe,运行就会弹出一个 Hello world! 窗口。

hello.c

#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) {
    MessageBox (NULL, "Hello world!", "Title",MB_OK);
    return 0;
}

后话

由于笔者这学期刚学 Windows API 程序,没写过Windows API 程序和用 gcc 编译,所以使用 gcc 编译会有很多坑,若是不想折腾就使用 VC++ 6.0 或者 VS 。笔者会在博客上继续记录一些坑,同时会修改这篇文章的不当之处。

转载于:https://www.cnblogs.com/linzhehuang/p/9596299.html

### 使用 GCCWindows编译 Socket 网络编程 C/C++ 代码 为了在 Windows 平台上成功使用 GCC 编译涉及套接字(Socket)网络编程的 C 或 C++ 程序,有几个重要的注意事项和步骤需要注意。 #### 安装 MinGW-w64 工具链 MinGW-w64 是一个用于 Windows 的 GNU 工具链实现,它提供了 gcc 和 g++ 来支持多种语言的开发工作。安装此工具链可以确保拥有最新的标准库版本和支持更多的特性[^1]。 #### 配置 VS Code 开发环境 对于希望利用 Visual Studio Code (VSCode) 进行编码工作的开发者来说,在编辑器内设置好相应的构建任务至关重要。这通常涉及到创建并调整 `tasks.json` 文件来指定如何调用编译器以及传递哪些参数给它们;同时也可能需要修改 `launch.json` 来定义启动配置以便于调试目的[^3]。 #### 处理 Winsock 库依赖项 当编写基于 TCP/IP 协议栈的应用程序时,经常需要用到特定的操作系统 API 函数——比如这里的 socket() 调用就需要链接到 Windows Sockets Library (`ws2_32.lib`) 。因此,在源码里除了包含必要的头文件 `<winsock2.h>` ,还需要告诉链接器去寻找该静态库的位置,并将其加入最终可执行文件之中[^2]。 下面给出一段简单的例子展示怎样正确地完成上述操作: ```c // example.c or example.cpp depending on language choice #include <winsock2.h> #include <stdio.h> #pragma comment(lib,"Ws2_32.lib") // This line tells the linker to link against ws2_32 library. int main(){ WSADATA wsaData; SOCKET client_socket; WSAStartup(MAKEWORD(2,2),&wsaData); client_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); printf("Compile successfully!\n"); closesocket(client_socket); WSACleanup(); } ``` 如果是在命令行环境下手动编译,则可以通过如下方式添加额外的选项让 GCC/G++ 寻找所需的外部资源: ```bash gcc -o my_program source_file.c -lws2_32 #g++ -o my_program source_file.cpp -lws2_32 如果是cpp文件的话 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值