扫盲回帖系列之3——在windows下编译生成的程序为什么不能在ubuntu下运行呢?

USB之ch376s数据手册          最近师兄交给我一个项目,虽说刚学嵌入式起步,但上手一个项目怎说都是最好的快速学习方式。因为刚了解ch376s管理U盘的数据,所以先是看了ch376s的数据手册。那我就把数据手册直接放上来吧。。。。      1、概述 CH376 是文件管理控制芯片,用于单片机系统读写 U 盘或者 SD 卡中的文件。 CH376 支持 USB 设备方式和 USB 主机方式,并且内置了 USB 通... 阅读详情



原始提问帖见http://bbs.youkuaiyun.com/topics/390931945。

       基本概念问题。不讨论可执行脚本情况,因为脚本不是由机器码构成,脚本在脚本解释器上运行,而解释器本身实现在不同谱系的操作系统(如Linux和Windows,不指同一种操作系统的不同版本情况,下同)上需要移植,解释器在同一操作系统的不同CPU上至少需要重新编译源码。
       同样的硬件CPU平台下(比如x86),不同操作系统,(二进制)可执行程序的机器码当然是一样的(这里的机器码是一样的意思是指令集是一样的,并不是说不同的可执行程序中的指令序列是一样的),不能运行的根本原因是不同操作系统提供的系统服务的形式是不同的,次要的原因是执行程序文件格式往往也不一样。

1、先说次要原因。不同操作系统下可执行文件的格式也往往不同。以典型的Linux和Windows为例,Linux下可执行文件格式一般是ELF格式(具体内容可搜),Windows下可执行文件格式一般是PE格式(具体内容可搜),ELF和PE两种格式互不兼容。应用程序运行其实是由操作系统的加载器(Loader)加载、创建对应的进程、跳入到程序的入口点(即第一条机器指令)之后真正开始执行的,这些事务的具体实现对不同的操作系统而言也是不同的。
2、再说主要原因,服务提供形式不同。一个具有实用功能的应用程序在运行时总是需要操作系统提供的服务,比如:读、写文件,显示输出等。尽管不同的操作系统(如Linux和Windows)都提供类似的基础服务,比如读、写文件,但即使在相同的CPU上,不同操作系统服务在具体实现的CPU指令(即机器码)序列并不同,借用其它称呼,姑且把这些服务提供的具体形式叫二进制接口——BI吧。为了避免查阅Linux和Windows内核文件创建服务的具体形式,图省事,我简而化之表述为前面的“实现的CPU指令(即机器码)序列并不同”,请谅解并体会其中的含义。

       同一个源程序想移植到不同操作系统平台,面临的主要困难是系统服务的形式不同,所以有移植需求的程序在设计上需要尽量分离这两部分:1)程序中操作系统无关的逻辑,2)程序中依赖操作系统服务的部分。移植话题再罗嗦两句,我们的应用程序源码总是由一种特定语言(如C)实现,特定语言的运行时环境其实构成了一个该语言层次的“虚拟机环境”。语言运行时环境在不同操作系统或CPU硬件上的移植工作一般并不需要我们自己承担。所以前面应用设计逻辑分离的思想可以更细化为:尽量抽取应用的纯算法逻辑部分+特定实现语言运行时依赖部分+目标操作系统依赖部分+可能的硬件机器依赖部分。

       文件格式不同并不重要,因为不同操作系统支持的、不同格式的可执行文件生成,应用程序开发者不用关心,这个工作是由你使用的编译系统帮你完成的。





WINCC7.3破解文件 WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载! 立即下载

相关推荐

【Autosar】学习总结-MCAL

一、简介 MCAL:微控制器抽象层;位于BSW层中的最下层; MCAL细分,可将驱动分为:微控制器驱动、存储器驱动、通信驱动、IO驱动: 二、MCAL的配置(EB-Tresos) 1.PORT 我理解的PORT:MCAL层中的IO驱动组中的pin脚总体配置: Port就是芯片上的每个pin脚,可以配置成DIO ADC PWM ICU等单引脚的功能,也能配置成CAN的TX或者RX、SPI的MOSI等等其他功能的单个pin脚功能; 总之,PORT就是芯片上的具体的某个引脚。 配置

zDavid_2018的博客 3万+

【Linux】Windows编写的shell语言在乌班图中运行失败的几点注意

可能有些小伙伴通过第二种情况就已经解决了,或者有些人没有真正的解决~ 解决办法: (1)通过指令:sed -i 's/^M$//' xxxxxxx.sh,上面的指令会把 xxxxxxx.sh 中的 ^M 替换成空白! 且保存退出即可; (2)若还是不能够解决问题,直接使用dos2unix命令修改: 首先安装模块:sudo apt-get install tofrodos 安装完成,执行shell代码: dos2unix test.sh 此时输出:dos2unix: converting file

nightglow的博客 831

【STM32CubeIDE入门】(一)工程创建&工程配置

​写在前面:如果是刚接触stm32cubeide的同学推荐与这一篇文章共同阅读,能够更加快速认识上手stm32cubeide。 1、打开stm32cubeide,选择好工作目录进入主界面后,点击创建工程。

涛涛子的博客 1万+

ubuntu中运行c# winform程序

确保你的C# WinForms程序的代码已经编译成了一个可执行的DLL文件。如果你的代码还没有编译,你可以在Windows环境下使用Visual Studio进行编译,或者使用Mono的编译工具mcs。在Ubuntu中运行C# WinForms程序,你需要安装Mono这个跨平台的.NET框架。可以使用Ubuntu的包管理器apt来安装Mono。在Ubuntu中运行你的WinForms程序。ubuntu中运行c# winform程序。安装WinForms的支持。

qq_14980415的博客 2236

国家医保移动支付国密算法SM2签名验签、SM4加解密DLL

DLL,非.net开发,所以无需安装配置,直接程序引用开发即可,支持各类开发语言。已知省份有广西、贵州、安徽、河北、黑龙江、湖南、吉林、江苏、四川、新疆等各地方。国家医保移动支付国密算法SM2签名验签、SM4加解密DLL。//SM4加密与解密。支持医保移动支付(国家统一版),//SM2签名与验签。

4263

第十二节:C#工业控制编程基础--输出正弦波实验

第十二节:基于c#使用开发板输出正弦波实验 文章目录第十二节:基于c#使用开发板输出正弦波实验一、实验目的:了解采集卡DA相关函数的使用。二、实验内容:利用C#生成正弦波,然后用采集卡DA输出。三、实验步骤:1.打开Visual Studio 2013,新建窗体应用程序项目,配置好板卡dll文件。2.在窗体中放入控件,对控件进行布局排版,并修改他们的Name属性和Text属性。3.在Chart控件内选择Spline型图表,如图2。4.进入编程区域,在public partial class Form1 :

weixin_49237052的博客 2296

求助Ubuntu编译时报错问题

求助:Ubuntu编译时报错:make[1]: c: Command not found Makefile:16: recipe for target ‘dtbsv.o’ failed,我已经装了gcc编译器。

qq_36641109的博客 379

提示工程从初级到高级:如何评估提示词的鲁棒性?架构师分享测试方法

鲁棒性(Robustness)原本是工程领域的概念,指系统在“非理想条件”下保持性能稳定的能力。输入鲁棒性:面对不规范、有噪音、格式变异的用户输入,提示能否引导模型输出正确结果?模型鲁棒性:同一提示在不同大模型(或同一模型的不同版本)下,输出是否一致?场景鲁棒性:在边界场景(极端case、歧义case、多任务混合)下,提示能否保持逻辑一致性?提示词V1:请将以下用户评论分类为「正面」「中性」或「负面」:{comment}。要求:输出唯一类别,不要额外说明。

小程序开发 496

win向Ubuntu传输文件

注:如果报错,则需安装openssh-server,安装完成后再重新启动ssh服务。,若能ping成功则可以开始在win和Ubuntu之间传输文件。:表示win下需要向Ubuntu窜书的文件。:表示Ubuntu接受文件的位置。,打开win终端,在命令行输入。3.1 在终端输入以下命令,:表示Ubuntu的IP地址。:表示Ubuntu主机名称。3.3 在win下,使用。文件,传到Ubuntu的。终端Terminal。Ubuntu的IP)3.2 使用以下命令。

qq_45670495的博客 4321

DC/DC开关电源学习笔记(十五)四开关Buck-Boost-FSBB升降压电路拓扑与工作原理

在DCDC领域,最为常见的是buck拓扑,其次是boost拓扑,而buck-boost的关注度相对较低。但是在电池供电场景日益普及的现在,升降压的需求在不断上升,现在更加关注buck-boost这个拓扑。而在所有buck-boost拓扑中,四开关buck-boost最受欢迎。四开关buck-boost的拓扑很简单,如下图。

小幽余生不加糖 6006

【云原生技术】sonar的官方web接口,获取质量阀结果的接口

以下是一个示例思路,说明如何调用 SonarQube 的质量阀查询接口并在前端展示“哪些条件没过”。假设前端使用 AJAX 或 fetch 从后端接口拿到 SonarQube 返回的 JSON(或直接前端请求 SonarQube API),前端再把解析结果展示给用户。测试覆盖率 (Coverage) 当前仅有 60%,未满足最低 80% 的要求,需要补充测试或优化以提升覆盖率。接口),就会返回相应的质量阀状态信息;里使用它来查询当前质量阀(质量门)的状态。,你用它即可获取该次分析的质量阀状态。

weixin_46453070的博客 1279

go在windows下编译ubuntu可运行的程序

打开cmd命令行 执行命令 设置编译的目标参数 set GOARCH=amd64 set GOOS=linux 然后执行编译命令 go build github.com/wjl2017/ethorder/cmd/eth-orders

战争迷雾的专栏 2185

代谢组数据分析(二十八):基于广义估计方程(GEE)的方法探究代谢物与临床表型相关性

本研究利用广义估计方程(GEE)方法对代谢组学数据进行了深入分析,旨在探究代谢物与临床表型之间的相关性。代谢组学数据具有高维性、样本间相关性以及混杂因素的复杂性,传统的统计方法难以有效处理这些问题。GEE方法通过引入相关性结构,能够有效地处理样本间的相关性,并同时调整多个混杂因素,从而提高了分析结果的准确性和可靠性。

专注生信领域 1277

Windows系统使用VScode开发golang程序,远程连接Ubuntu系统编辑代码并编译运行

文章目录虚拟机安装Ubuntu虚拟机安装及注册VMware安装Ubuntu无桌面版Ubuntu系统配置golang环境Ubuntu系统配置git、mysqlVScode插件安装安装Remote DevelopmentMySQL management tool翻译插件新的改变功能快捷键参考 使用Windows进行编程开发虽然很方面,有着各种可视化桌面工具,但是对于特定的依赖可能安装起来特别费劲。比如,在使用golang进行开发时,有些场景会调用c代码,这就需要配置cgo环境,而Windows系统配置cgo就比

sym的博客 2655

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Eclipse:在Eclipse中将一个.java文件打包成.jar文件,并在Linux/Ubuntu中运行

在Eclipse中将一个.java文件打包成.jar文件,并在Linux/Ubuntu中运行

weixin_63610637的博客 2892

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

将jar包、mysql、前端代码部署到ubuntu(仅限练习,不考虑安全等问题)

前言:本文是以获得了项目的jar包、mysql数据库、和前端代码的前提下,将该项目部署到ubuntu服务器上。仅限练习,不考虑安全等问题 jdk:1.8.0_321 mysql:8.0.28 nodejs:16.14.2 ubuntu:20.04.4 LTS

试着存点什么 1084

windows 10 运行 linux,如何在Windows 10中运行Ubuntu Linux

Win10zhijia提供图片“噢,噢,不,再说一次Linux!”嚷嚷着愤怒的最大PC读者。 “不要试图在我们身上强调这个胡扯,共产主义启发,开放源代码的废话!”没有人想要安装整个操作系统,只是为了解决一些基于终端的垃圾,所以微软做了正确的事情,并使用Linux的Windows子系统将Linux带入Windows。与领先的Linux开发商Canonical合作,开发了WSL,使您能够有效地在Win...

weixin_42525261的博客 418

装完linux无法进入windows,安装Ubuntu后无法启动Windows,如何解决?

GRUB菜单未出现如果计算机在完全不显示GRUB菜单的情况下自动引导到Ubuntu,则有时可以在引导时按制造商的BIOS / UEFI键,而在UEFI或BIOS模式下,从固件菜单中选择所需的操作系统。使用的通用键为Esc,Delete,F1,F2,F10,F11或F12。在平板电脑上,常用按钮为“提高音量”或“降低音量”。在启动过程中,通常会出现一个屏幕,其中包含密钥。如果没有,或者屏幕显示速度太...

weixin_28956763的博客 4617

Ubuntu 18.04换 清华源

依次执行如下命令(使用清华源可以走ipv6) 1.首先需要使用root用户sudo-s输入root密码2.进行原来源的备份cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份 3.进行源列表的修改vi /etc/apt/sources.list #修改 deb https://mirrors.tuna.tsinghua.edu.cn/ub...

zhangvalue的博客 1万+

在 Ubuntu 中运行 Windows 应用

在 Ubuntu 中运行 Windows 应用 厌倦了 Windows 传统的桌面环境却放弃不了 Windows 上的应用?喜欢 Linux 但是应用生态不足以满足日常使用?现在 Linux 上也能运行 Windows 应用啦! 测试系统:Ubuntu 20.10 测试时间:Feb 3rd, 2021 测试电脑:Surface Pro 2017 model 1796 Wine Wine?红酒? No!Wine 在这里是”Wine Is Not an Emulator“,是我们用来在 Linux 环境下运行

qq_15240273的博客 9124

ubuntu下双击自己编写的脚本无法执行,但是在终端上可以执

由于项目需要,需要在产线实现一键烧录软件的功能,然后编写了一个自动烧录的脚本,实现这个需求. 刚开始我的想法是在Linux下的写个在Ubuntu上运行的GUI程序,点击烧录按钮实现烧录,经过查找资料,完全没有必要,在Linux下也可以像Windows系统一样,双击批处理文件,自动执行命令! 还可以为自己的编写的脚本写个desktop文件(Windows上的快捷方式) 1:实现双击shell脚本自动执行的功能,可以百度. 文件-> 首选项->行为->可执行文本文件->总是询问

csdnlg112的专栏 1511

【Linux】windows下编写的脚本文件,放到Linux中无法识别格式

注意:我启动的时候遇到脚本错误 » sh startup.sh -m standalone tanghuang@bogon : command not found : command not found : command not found: 'tartup.sh...

weixin_30244681的博客 616

windows写的脚本,ubuntu虚拟机始终报错 [Error 2]no such file or directory

windows写的脚本,在ubuntu虚拟机运行后 始终报错 [Error 2]no such file or directory设定了对应路径后仍然报错,发现是ubuntu系统就没有这个文件。解决方法:打开pycharm,选择Tools--Deployment--Configuration弹出对话框中点左上角加号输入一个名字,并选择SFTP协议接着在新窗口中输入远程服务器地址、端口号(一般默认2...

doubledog1112的专栏 4246

在Ubuntu上编译生成Windows程序

安装mingw32`$ sudo apt-get install mingw32我的是ubuntu16.04,没有找到mingw32,如果源里面没有mingw32的话,打开/etc/apt/sources.list$sudo vim /etc/apt/sources.list加上一行http://us.archive.ubuntu.com/ubuntu trusty main universe编译自

Focus 6559

使用windows在Ubuntu服务器上运行代码

使用windows在Ubuntu服务器上运行代码整体流程安装必备软件连接目标服务器上传自己的代码控制服务器跑代码并得到结果END 整体流程 要到目标服务器的: a) IP地址 b) 用户名 c) 密码 安装必备软件(Xshell 、filezilla) 连接目标服务器 上传自己的代码 控制服务器跑代码并得到结果 ~要到目标服务器的信息是同学你的事情啦,本文不再说明。~ 安装...

yo跟着新宇走 5399
上一篇: 扫盲回帖系列之2——操作系统的疑问
下一篇: Keil 8051 RTX51 Tiny使用注意事项
二进制脑袋
博客等级 码龄25年 25粉丝 21原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值