当前位置: 首页 > news >正文

Day05_Linux项目怎么打包成exe

01.通过linux操作系统打包成exe文件??

通过修改makefile

EXE=contact.exe
Filename=$(wildcard *.c)
Head=$(wildcard *.h)
Objs=$(patsubst %.c,%.o,$(Filename))
# 使用 MinGW 的 GCC 编译器
CC=x86_64-w64-mingw32-gcc
CFlags=-c -Wall
LDFLAGS=-lmingw32 -lmsvcrt -luuid -loleaut32 -lole32  # 添加链接选项all:$(EXE)
$(EXE):$(Objs)$(CC) $^ $(LDFLAGS) -o $@
%.o:%.c $(Head)$(CC) $(CFlags) $< -o $@
.PHONY:clean
clean:rm -f $(EXE) $(Objs) a.out

C语言里面代码一般都是UTF-8编码的,但是windows打包是GBK编码的
需要在C语言添加处理语句

方法 1:使用 Windows API 设置控制台为 UTF-8 模式

#include <windows.h>int main() {// 设置控制台输出为UTF-8编码SetConsoleOutputCP(CP_UTF8);// 后续代码保持不变...printf("中文测试\n");return 0;
}

说明:
SetConsoleOutputCP(CP_UTF8) 将控制台输出代码页设置为 UTF-8(65001)。
需确保源码文件本身以 UTF-8 编码保存(大多数现代编辑器默认如此)。

方法 2:使用宽字符 API(推荐)

使用 Windows 特有的宽字符 API(如wprintf),配合 Unicode 字符串:

#include <stdio.h>
#include <wchar.h>
#include <windows.h>int main() {// 设置控制台为UTF-8模式SetConsoleOutputCP(CP_UTF8);// 使用宽字符输出wprintf(L"中文测试\n");  // 注意字符串前的Lreturn 0;
}

说明

wprintf 用于输出宽字符字符串(wchar_t 类型)。

字符串前需加 L 前缀,表示 Unicode 字符串。

方法 3:手动转换字符编码

#include <stdio.h>
#include <windows.h>// 将UTF-8字符串转换为控制台可显示的字符串
char* utf8_to_console(const char* utf8_str) {// 计算宽字符所需缓冲区大小int wcs_len = MultiByteToWideChar(CP_UTF8, 0, utf8_str, -1, NULL, 0);wchar_t* wcs = (wchar_t*)malloc(wcs_len * sizeof(wchar_t));MultiByteToWideChar(CP_UTF8, 0, utf8_str, -1, wcs, wcs_len);// 获取控制台当前代码页UINT console_cp = GetConsoleOutputCP();// 计算多字节字符串所需缓冲区大小int mb_len = WideCharToMultiByte(console_cp, 0, wcs, -1, NULL, 0, NULL, NULL);char* mb_str = (char*)malloc(mb_len * sizeof(char));WideCharToMultiByte(console_cp, 0, wcs, -1, mb_str, mb_len, NULL, NULL);free(wcs);return mb_str;
}int main() {const char* utf8_text = "中文测试";char* console_text = utf8_to_console(utf8_text);printf("%s\n", console_text);free(console_text);return 0;
}

02.通过window操作系统打包成exe文件??

需要下载软件(hostbuf-finalshell)

https://www.hostbuf.com/t/988.html


上面是如何在windows中操作linux系统的流程

按住shift+长按鼠标右键打开powershell

http://www.lqws.cn/news/507169.html

相关文章:

  • ArkUI-X通过Stage模型开发Android端应用指南(二)
  • Drag-and-Drop LLMs: Zero-Shot Prompt-to-Weights
  • 华为云Flexus+DeepSeek征文|华为云ModelArts Studio:利用New API实现大模型网关与AI资产管理的无缝对接
  • Revisiting Image Deblurring with an Efficient ConvNet论文阅读
  • 五种 IO 模式的简单介绍 -- 阻塞 IO,非阻塞 IO,信号驱动 IO,IO 多路复用,异步 IO
  • 2025.6.16-实习
  • 网络安全攻防:2025年新型钓鱼攻击防御指南
  • JVM(12)——详解G1垃圾回收器
  • 使用预训练权重在YOLO模型上训练新数据集的完整指南
  • 深入理解RAG:大语言模型时代的知识增强架构
  • 解析云计算虚拟化基石:KVM、QEMU与Libvirt的协同
  • SpringBoot - 整合 Redis 实现数据分布式缓存
  • 通过环境变量管理多版本JDK8、11、17并安装idea编译器
  • 攻防世界-MISC-MeowMeowMeow
  • BRAIN LANG:新发现!大脑网络重新调整以补偿在嘈杂环境中的听力困难
  • 【MV】编排4:基于时间线数据的密度突变检测和密度平滑算法
  • Springboot项目中使用手机号短信验证码注册登录实现
  • wpf单文件打包还有 一些dll打包不进去?
  • JS核心操作符:从基础到ES6+
  • phpstudy apache伪静态.htaccess文件置空丢失问题解决
  • iostat中的util原理
  • 从iOS到Flutter:我的转型之路与技术成长启示
  • matplotilb实现对MACD的实战
  • TDengine 技术参数配置大全
  • Docker 报错“x509: certificate signed by unknown authority”的排查与解决实录
  • 什么是 OA 系统?OA 系统要具备什么样的功能?
  • jsoncpp-src-0.5.0编译
  • Python Bug 修复案例分析:编码问题导致程序出现bug 两种修复方法
  • Redis哈希表Rehash全解析:扩容缩容背后的渐进式智慧
  • SpringBoot 自动化部署实战:CI/CD 整合方案与避坑全指南