Linux(Ubantu)交叉编译生成windows(32位,64位)可执行程序和库

这篇具有很好参考价值的文章主要介绍了Linux(Ubantu)交叉编译生成windows(32位,64位)可执行程序和库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

机缘

机缘巧合下收到了这个小任务.

工作流

先是找了下资料发现过去的都是关于mingw32. 教程的做法:

  1. 增加个源 (trusty 是linux发行的版本标识,比如22.04是jammy
    交叉编译链生成可执行文件,Linux,linux,windows,运维
deb http://us.archive.ubuntu.com/ubuntu trusty main universe
  1. 更新源
sudo apt update
  1. 下载mingw32.
sudo apt install mingw32

结果发现在源里根本找不到mingw32
报错 Unable to locate package mingw32

最后发现 ubantu高于15.04的版本mingw32不可用,这也就是上面找不到这个的原因.毕竟现在是2024年1月10日18:06分(已经下班了),一般的版本都在20.04上.


关于mingw-w64
从 Ubuntu 15.04 版本开始,mingw32 工具链不再提供,取而代之的是 mingw-w64。mingw-w64 是一个跨平台的 C/C++ 编译器,可以在 Linux 或其他操作系统上编译 Windows 应用程序。与 mingw32 相比,mingw-w64 提供了对 64 位 Windows 应用程序的支持,并且通常被认为是更现代和更新的工具。

如果您需要在 Ubuntu 系统上安装 mingw-w64,可以通过以下命令进行:

sudo apt-get update
sudo apt-get install mingw-w64

在使用 mingw-w64 编译 Windows 程序时,您应该使用新的目标前缀 i686-w64-mingw32(用于 32 位应用程序)和 x86_64-w64-mingw32(用于 64 位应用程序),取代原来的i586-mingw32msvc前缀。例如,如果您想要编译一个 32 位的 Windows 应用程序,您可以使用如下命令:

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

下载完成后在 /usr/bin下可以看到:(32位和64位的交叉工具链,mingw-w64这个包提供了交叉编译生成32位或者是64位的gcc和g++.)
交叉编译链生成可执行文件,Linux,linux,windows,运维

交叉编译链生成可执行文件,Linux,linux,windows,运维

类似于我们平时习惯交叉编译生成arm或者是riscv架构的库和程序,我使用cmake来进行构建测试程序.这也就是主题在LINUX交叉编译生成win32,win64的可执行程序或库

搭建环境

交叉编译链生成可执行文件,Linux,linux,windows,运维

工具链文件

# cross compile settings
set(CMAKE_SYSTEM_NAME Windows)

#####
##### change following env according to your installation.
#####
 
message(STATUS "cross compile for windows_32 ")
set(TOOLCHAIN_PATH  /usr)
set(CMAKE_C_COMPILER ${TOOLCHAIN_PATH}/bin/i686-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/bin/i686-w64-mingw32-g++)
 
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
 
 


CMakeLists.txt

set(CMAKE_TOOLCHAIN_FILE  ${CMAKE_CURRENT_SOURCE_DIR}/mingw32_64_toolchain.cmake) 

project(mingw32_test)
set(APP "mingw32test")
cmake_minimum_required(VERSION 3.5)
# opencv4 requires c++11
set(CMAKE_CXX_STANDARD 11)

add_library(${APP} SHARED test.cpp)


add_executable(mytest  main.cpp )
target_link_libraries(mytest  mingw32test)




main.cpp生成交叉编译生成的依赖库的可执行文件

#include "iostream"
int test();
int main()
{
    std::cout<<"test\r\n";
    test();
    return 0;
}


test.cpp 交叉编译生成win32上的动态库

#include "iostream"

int test()
{
	std::cout << "this is dll test\r\n";
	return 0;
}

需要注意的地方

关于下面两行代码

set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")

因为mingw-w64编译器不认识 -rdynamic 这个命令行选项。这个选项通常用于 Unix-like 系统的编译器,用以指导链接器在生成可执行文件时保留符号信息,以便支持运行时的符号解析(例如用于动态加载库).该选项对于 Windows 下的编译是无效的,通过上面两行代码的设置清除CMake 为了 Unix-like 系统默认添加的链接标志。

最后在build目录在执行 make clean all -j8 即可生成win32平台的库和可执行程序.
如果我们使用的linux环境又安装wine解释器(能够解析windows平台的可执行程序) 则能直接允许直接在linux环境中运行我们生成的win32的可执行程序(包括验证win32平台的动态库).

交叉编译链生成可执行文件,Linux,linux,windows,运维
如果测试需要把程序放在win10上运行,记得关闭win10的实时保护.不然被被当成木马处理.

交叉编译链生成可执行文件,Linux,linux,windows,运维文章来源地址https://www.toymoban.com/news/detail-811644.html

到了这里,关于Linux(Ubantu)交叉编译生成windows(32位,64位)可执行程序和库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安装交叉编译工具链aarch64-linux-gnu-g++ 以及cmake测试

       测试文件结构    CMakeLists.txt  参考文章: linux 交叉编译 C和C++_aarch64-linux-gnu-gcc查看版本_weixin_45302027的博客-CSDN博客 ubuntu16.04 安装交叉编译工具aarch64-linux-gnu-gccg++_ubuntu 安装aarch64-linux-gnu-gcc_普通网友的博客-CSDN博客

    2024年02月12日
    浏览(51)
  • 一文搞懂交叉编译,Windows和Linux的交叉编译

    在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(

    2024年02月07日
    浏览(65)
  • 【交叉编译踩坑指北(一)】windows10下Vscode与Cmake编译生成文件

      工具链版本如下 C:UsersLenovocmake -version cmake version 3.24.2 C:UsersLenovomingw32-make -v GNU Make 4.2.1 Built for x86_64-w64-mingw32   若没有以上工具则进行安装,将bin文件加入到环境变量中, 注意:有的交叉编译器在安装时选择自动加入环境变量可能并不会加入,还是需要手动加入环

    2023年04月15日
    浏览(51)
  • Qt5.9 Ubuntu18.04-64位交叉编译目标机为Ubuntu18.04-arm-32位基于RK3288

    文章目录 一、需要准备的材料 二、操作步骤 1.更新软件源 2.安装环境依赖 3.搭建交叉编译环境 4.编译QT 5.安装Qt creator 6.配置Qt kit 三.测试 前言 本文使用VMware虚拟机作为Ubuntu系统载体,采用Ubuntu18.04-64位镜像作为QT编译环境,采用RK3288搭载Ubuntu18.04-arm-32作为QT执行环境。 ① 交

    2024年02月17日
    浏览(49)
  • windows中的qt程序如何进行交叉编译

    这里我使用Qt-Embedded-5.7.0.tar.xz库文件 1、首先查看自己的交叉编译工具版本 使用 which arm-linux-gcc命令查看,我的是5.4.0,如果不是的话可能需要重新安装交叉编译工具   2. 把移植好的 QT 库文件解压到 linux 系统中 sudo tar - xvf Qt - Embedded - 5.7.0.tar.xz - C  / usr / local / 3. 进入到需要

    2024年02月11日
    浏览(50)
  • 【Golang】Windows与Linux交叉编译保姆级教程

    大家好 我是寸铁👊 总结了一篇【golang】Windows与Linux交叉编译的文章✨ 喜欢的小伙伴可以点点关注 💝 今天寸铁想将 Windows 中的程序部到 Linux 下跑,我们知道在从 Windows 与 Linux 下要进行交叉编译,通常是在 Windows 中打包成一个文件在再 Linux 下编译执行,我们管这个过程叫做

    2024年04月09日
    浏览(45)
  • 使用CMake交叉编译Arm Linux程序

    注意,工具链文件的指定一定要紧跟cmake命令之后,不能放到 … 后面构建arm架构cmake 工程里新建一个文件叫arm_linux_setup.cmake arm_linux_setup.cmake内容如下

    2024年02月03日
    浏览(57)
  • 【Clion+OpenOCD+Stm32CubeMX+gcc】linux交叉编译开发stm32全过程

    双系统:ubuntu 22.04 电脑:拯救者Y7000 板子:stm32f103c8t6 一段摸爬滚打的辛酸史,囊括了我在过程中遇见的所有报错及解决方法! 记录自己实现的步骤,过程已经跟新完毕,笔者能力有限所用的方法以及代码考虑的不一定全面,也希望大佬多多补充! 目录 安装stm32cubeIDE 官网下

    2024年02月22日
    浏览(48)
  • Swupdate的aarch64交叉编译

    上一篇博客我们简单测试了swupdate的基础功能,当时使用的是buildroot进行编译的,依赖关心有buildroot进行处理了。今天我自己手动编译一些swupdate。下面记录了编译swupdate的过程。 基本过程就是下载源码,配置选项,然后进行编译。 swupdate是在github上下载的,下载地址为: l

    2024年02月12日
    浏览(70)
  • 交叉编译ARM64架构electron详解

    本文主要参考Electron官方文档中 构建说明 和 构建步骤(Linux) 在amd64环境内构建arm64的electron包。 如果是arm64环境请查看文章arm64架构编译electron长征路 操作系统版本:统信1060 操作系统架构:amd64 内存:32G 如下图: electron版本:v25.9.8 chromium版本:114.0.5735.289 由于llvm编译需要

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包