linux平台交叉编译Windows 程序

 

编译测试环境:ubuntu18.04  

 第一步:安装mingw32

sudo apt-get install mingw-w64
sudo apt-get install mingw-w64-tools 
sudo apt-get install mingw-w64-i686-dev 
sudo apt-get install mingw-w64-x86-64-dev 

上面这些可能会有重复的地方,为了省劲,直接都安装了。

安装完之后就可以编译代码了

i686-w64-mingw32-gcc -o hello.exe hello.c

 

第二部:测试编译出来的程序

编译出来的exe文件可以copy到windows上测试,不过为了省劲,我想直接在linux上运行。这样就需要完整wine了。

sudo apt-get install wine-development

wine ~/hello.exe

>hello world

 

第三部:编译64位程序

因为本人需要编译x64位程序,但测试发现程序为32位程序。

 

x86_64-w64-mingw32-gcc -o hello64.exe hello.c

 

第四部:在windows上使用pthread 库

pthread真的很好用,windows默认没有pthread库。

i686-w64-mingw32-gcc -o pthread_create.exe pthread_create.c -lpthread -D__WIN32

竟然发现直接编译过了,说明mingw32 已经把pthread库包含进去了。

跑到windows上面执行,报"libwinpthread-1.dll .......... not found"

我直接将/usr/i686-w64-mingw32/lib 文件夹下的 libwinpthread-1.dll文件复制到windows里面。发现可以运行了。

够简单,够粗暴吧?不过确实很爽

实际上我windows下面也下载了pthread库,可惜还是报找不到库,可能是gcc不是隐式加载吧。

 

使用cmake 构建交叉编译工程

正在研究,候补

https://www.jianshu.com/p/c50f0b60563b

https://blog.csdn.net/ubuntu64fan/article/details/8918808

https://blog.csdn.net/bytxl/article/details/50635788

 

关于MinGW编译程序出现缺少libgcc_s_dw2-1.dll问题

原来是链接时默认使用动态linking,对方的电脑无依赖的DLL模块。
于是我在链接后添加指令:

-static-libstdc++ -static-libgcc

参考资料:

https://www.systutorials.com/docs/linux/man/1-i686-w64-mingw32-gcc/

### 回答1: Windows交叉编译Linux程序需要使用交叉编译工具链,该工具链包含了Linux系统的头文件和库文件,可以在Windows环境下编译出可在Linux系统上运行的程序。具体步骤包括安装交叉编译工具链、配置环境变量、编写Makefile文件并进行编译。需要注意的是,不同的架构和操作系统需要使用不同的交叉编译工具链。 ### 回答2: 在进行windows交叉编译linux程序前,我们需要明确几个概念:编译器、交叉编译、目标架构、可执行文件格式。 1. 编译器 编译器是将源代码转换成可执行文件的工具。在进行交叉编译时,我们需要使用支持交叉编译的编译器。常用的有gcc、llvm等。 2. 交叉编译 交叉编译是指在一种操作系统上,使用编译器,将程序编译成可以在另一种操作系统上运行的程序。在进行windows交叉编译linux程序时,我们需要将源代码编译成适用于linux平台的可执行文件。 3. 目标架构 目标架构是指最终要运行的程序的硬件架构,如x86、ARM等。在进行交叉编译时,我们需要指定目标架构。 4. 可执行文件格式 可执行文件格式是指程序编译后生成的文件格式。在linux平台上,常用的格式有ELF,而在Windows平台上,常用的格式则是PE格式。在进行交叉编译时,我们需要选择适用于linux平台的可执行文件格式。 进行windows交叉编译linux程序的步骤如下: 1. 安装支持交叉编译的编译器,如MinGW、Cygwin等。 2. 在编译器中设置目标架构和可执行文件格式。根据实际情况选择对应的目标架构和可执行文件格式。 3. 编写源代码并进行编译。可以使用Makefile等工具进行编译。 4. 将生成的可执行文件拷贝到linux平台上进行测试和运行。 需要注意的是,在进行windows交叉编译linux程序时,可能会存在一些编译器和库的版本不兼容的问题,需要进行适当的调整和修改。同时,由于不同平台的系统调用和系统库不同,需要在编写源代码时尽可能避免使用平台相关的代码,或者做好适配工作。 ### 回答3: 交叉编译是指在一个平台上编写并生成用于在另一个不同的平台上运行的代码。在Windows交叉编译Linux程序并非难事,只需按照以下步骤进行操作。 1. 在Windows上安装Linux交叉编译器和相关开发工具。可以使用cygwin等作为Linux的运行环境,也可以选择使用MinGW交叉编译器。 2. 编写源代码,并配置编译环境。需要在Windows上安装与Linux系统相同版本的头文件和库文件,以便可以在Windows上编译出Linux可执行文件。 3. 配置makefile文件,进行编译。makefile文件需要指定交叉编译器的路径和编译选项,以及链接库的路径和选项等。 4. 在Windows上使用交叉编译器进行编译。在使用交叉编译器时,需要先设置交叉编译器的环境变量,以便正确调用交叉编译器。 5. 复制生成的可执行文件到Linux系统上进行测试。将生成的可执行文件复制到Linux系统上,通过运行程序测试交叉编译的结果是否正确。 总体而言,Windows交叉编译Linux程序需要具备一定的编程和Linux操作系统的知识,并且需要进行一些配置和调试工作。但是一旦掌握了这些技巧,成功交叉编译Linux程序将会对后续的Linux软件开发工作带来很大的便利。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值