搜索
bottom↓
回复: 47

请教万能的朋友们,LINUX用C开发编译出来的文件是怎么执行的?

[复制链接]

出75入8汤圆

发表于 2023-9-19 13:08:09 | 显示全部楼层 |阅读模式
如题,用ARMGCC编译后咋执行的?WINDOWS是EXE形式,那LINUX是怎么执行的?

出0入12汤圆

发表于 2023-9-19 13:16:35 来自手机 | 显示全部楼层
好像有可执行属性就能执行,./文件名 就能运行了

出75入8汤圆

 楼主| 发表于 2023-9-19 13:43:45 | 显示全部楼层
kv2004 发表于 2023-9-19 13:16
好像有可执行属性就能执行,./文件名 就能运行了
(引用自2楼)

谢谢,那自动执行咋执行?

出0入8汤圆

发表于 2023-9-19 14:05:37 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-19 13:43
谢谢,那自动执行咋执行?
(引用自3楼)

可以设置开机自启动,网上一大把教程

出75入8汤圆

 楼主| 发表于 2023-9-19 14:10:39 | 显示全部楼层
蓝蓝的恋 发表于 2023-9-19 14:05
可以设置开机自启动,网上一大把教程
(引用自4楼)

好的,谢谢

出0入17汤圆

发表于 2023-9-19 14:26:01 | 显示全部楼层
linux的可执行文件是elf格式,windows的exe文件是pe格式

出0入59汤圆

发表于 2023-9-19 15:48:25 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-19 13:43
谢谢,那自动执行咋执行?
(引用自3楼)

我一般在串口上挂一片STM32F103, 上电的时候,输入上的命令行, 程序就开机自动运行了

出0入0汤圆

发表于 2023-9-19 16:16:38 | 显示全部楼层
busybox开机自动启动ftp服务的脚本
~ # cat /etc/init.d/S99ftp
#!/bin/sh
#
# Start ftp
#

case "$1" in
start)
        echo "Starting ftp..."
        #ifdown -a
        #ifup -a
        tcpsvd -vE 0.0.0.0 21 ftpd -w / &
        ;;
  stop)
        ;;
  restart|reload)
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?
~ #

出0入0汤圆

发表于 2023-9-19 16:39:16 | 显示全部楼层
polarbear 发表于 2023-9-19 15:48
我一般在串口上挂一片STM32F103, 上电的时候,输入上的命令行, 程序就开机自动运行了 ...
(引用自7楼)

兄弟你这是认真的吗?真这样干了?

出0入42汤圆

发表于 2023-9-19 16:42:36 | 显示全部楼层
看看这个脚本/etc/init.d/rc.local.sh ,一般开机启动可以添加在这个文件里

出75入8汤圆

 楼主| 发表于 2023-9-19 17:08:01 | 显示全部楼层
Nuker 发表于 2023-9-19 14:26
linux的可执行文件是elf格式,windows的exe文件是pe格式
(引用自6楼)

谢谢,我是说ARMGCC编译一个例如:打印HELLWORD的C小程序,怎么让它开机能运行起来。

出75入8汤圆

 楼主| 发表于 2023-9-19 17:08:32 | 显示全部楼层
polarbear 发表于 2023-9-19 15:48
我一般在串口上挂一片STM32F103, 上电的时候,输入上的命令行, 程序就开机自动运行了 ...
(引用自7楼)

这个没见过这样用的,说实话,不过也谢谢您。

出75入8汤圆

 楼主| 发表于 2023-9-19 17:09:12 | 显示全部楼层
jenkins 发表于 2023-9-19 16:16
busybox开机自动启动ftp服务的脚本
~ # cat /etc/init.d/S99ftp
#!/bin/sh
(引用自8楼)

好的,不过您这个有点复杂,说实话,也谢谢您。

出75入8汤圆

 楼主| 发表于 2023-9-19 17:10:03 | 显示全部楼层
位卑未敢忘忧国 发表于 2023-9-19 16:39
兄弟你这是认真的吗?真这样干了?
(引用自9楼)

这样干很少的。

出75入8汤圆

 楼主| 发表于 2023-9-19 17:10:29 | 显示全部楼层
我是一个大白菜 发表于 2023-9-19 16:42
看看这个脚本/etc/init.d/rc.local.sh ,一般开机启动可以添加在这个文件里
(引用自10楼)

谢谢,您这个我试试看。

出75入8汤圆

 楼主| 发表于 2023-9-19 17:14:29 | 显示全部楼层
本帖最后由 ZHAOBAO511 于 2023-9-19 17:18 编辑
我是一个大白菜 发表于 2023-9-19 16:42
看看这个脚本/etc/init.d/rc.local.sh ,一般开机启动可以添加在这个文件里
(引用自10楼)


另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LINUX系统,让我调试串口,我以前从来没这样玩过,就是没芯片型号ARMGCC能随便编译?关键是只能用C,给了个网络IP地址。兄弟,我感觉是在玩我。 难道不用引入头文件这些?虽然通过坛友知道了这个芯片型号,但是问题是客户这样做真的是不是可以?

出0入42汤圆

发表于 2023-9-19 17:20:28 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-19 17:14
另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LI ...
(引用自16楼)

我也是外行, 主要看cpu指令集, glibc, libgcc的版本

出75入8汤圆

 楼主| 发表于 2023-9-19 17:37:17 | 显示全部楼层
albert_w 发表于 2023-9-19 17:20
我也是外行, 主要看cpu指令集, glibc, libgcc的版本
(引用自17楼)

好的,谢谢,我再看看。

出0入42汤圆

发表于 2023-9-19 17:41:00 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-19 17:14
另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LI ...
(引用自16楼)

简单的,cat /proc/cpuinfo  这个命令可以看到处理器信息;
uname -a  这个命令可以看到linux的内核信息,查一下内核对应的gcc版本,主要是交叉编译arm-linux-gnueabi-gcc,或者arm-linux-gnueabihf-gcc,带不带hf后缀的区别,不匹配会导致编译的结果不能运行。
如果要稳妥一点,可以静态编译,arm-linux-gnueabihf-gcc -o work_demo  demo.c -static  ,类似这样吧,可以规避一点不匹配的问题。
至于你说的头文件引用缺少的问题,这个是你编译环境决定的,搞个虚拟机运行ubuntu,交叉编译目标板程序,可以看看正点原子,韦东山等linux程序开发入门,基本就了解了。

出0入0汤圆

发表于 2023-9-19 17:41:47 来自手机 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-19 17:14
另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LI ...
(引用自16楼)

芯片型号都不知道,怎么知道用哪个编译器。

出75入8汤圆

 楼主| 发表于 2023-9-19 17:45:59 | 显示全部楼层
我是一个大白菜 发表于 2023-9-19 17:41
简单的,cat /proc/cpuinfo  这个命令可以看到处理器信息;
uname -a  这个命令可以看到linux的内核信息 ...
(引用自19楼)

谢谢,那就是说可以不用知道内核信息就可以直接编译?我现在是用UBUNTU+VMWARE,以前我用过交叉编译,就是WINDOWS下编译,都是二进值的结果,那个编译后也是二进制结果去运行吗?非常感谢您的回复,谢谢。

出75入8汤圆

 楼主| 发表于 2023-9-19 17:46:24 | 显示全部楼层
McuY 发表于 2023-9-19 17:41
芯片型号都不知道,怎么知道用哪个编译器。
(引用自20楼)

问题就在这里,客户说不用知道就可以。

出0入50汤圆

发表于 2023-9-19 17:46:27 来自手机 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-19 17:14
另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LI ...
(引用自16楼)

可以,要板子对应的交叉编译器,里边包含了基本的库
Linux下操作串口就像读写文件一样

出0入42汤圆

发表于 2023-9-19 17:53:47 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-19 17:45
谢谢,那就是说可以不用知道内核信息就可以直接编译?我现在是用UBUNTU+VMWARE,以前我用过交叉编译,就 ...
(引用自21楼)

1,交叉编译工具适配这个板子的内核,换句话说这个目标板子的内核用的什么交叉编译工具,你也用一样的,目前看来可能达不到这个要求;2.或者是用静态编译,可以不一定和目标板的内核交叉编译工具一致。
你看看先满足哪一个,基本上简单的tcp,udp,串口之类的程序,都可以在目标板上运行的

出75入8汤圆

 楼主| 发表于 2023-9-19 18:08:03 | 显示全部楼层
span42 发表于 2023-9-19 17:46
可以,要板子对应的交叉编译器,里边包含了基本的库
Linux下操作串口就像读写文件一样 ...
(引用自23楼)

好的,谢谢,我再想想看。

出75入8汤圆

 楼主| 发表于 2023-9-19 18:09:09 | 显示全部楼层
我是一个大白菜 发表于 2023-9-19 17:53
1,交叉编译工具适配这个板子的内核,换句话说这个目标板子的内核用的什么交叉编译工具,你也用一样的, ...
(引用自24楼)

那编译出来的是二进制BIN文件在LINUX主机上运行吗?

出75入8汤圆

 楼主| 发表于 2023-9-19 18:09:28 | 显示全部楼层
我是一个大白菜 发表于 2023-9-19 17:53
1,交叉编译工具适配这个板子的内核,换句话说这个目标板子的内核用的什么交叉编译工具,你也用一样的, ...
(引用自24楼)

那编译出来的是二进制文件在LINUX主机上运行吗?

出0入42汤圆

发表于 2023-9-19 18:10:57 | 显示全部楼层
依赖不多的程序可以的. go语言直接一句命令编译各个平台的二进制文件, 你想他哪知道目标芯片是啥
他把库都静态编译进去了

出75入8汤圆

 楼主| 发表于 2023-9-19 18:12:07 | 显示全部楼层
albert_w 发表于 2023-9-19 18:10
依赖不多的程序可以的. go语言直接一句命令编译各个平台的二进制文件, 你想他哪知道目标芯片是啥
他把库都 ...
(引用自28楼)

客户直接定死C语言,后边他们还要加内容。

出0入42汤圆

发表于 2023-9-19 18:49:09 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-19 18:09
那编译出来的是二进制BIN文件在LINUX主机上运行吗?
(引用自26楼)

只要是正确编译的,可以运行。推荐你还是找找这方面的教学视频,先了解一下

出0入475汤圆

发表于 2023-9-19 19:56:52 来自手机 | 显示全部楼层
这个不就是现在那些玩树莓派一类的不就这样吗?
板子(芯片)相当于已经是一台电脑了,你在电脑上面编一个helloword难道还要去知道电脑cpu到底是用的amd的还是英特尔的?

出0入37汤圆

发表于 2023-9-19 20:11:46 | 显示全部楼层
1a2b3c 发表于 2023-9-19 19:56
这个不就是现在那些玩树莓派一类的不就这样吗?
板子(芯片)相当于已经是一台电脑了,你在电脑上面编一个h ...
(引用自31楼)

你得看交叉编译还是本地编译,如果是交叉编译,要么有下位机CPU的编译器,要不有下位机CPU型号,好自己找编译器。

出0入475汤圆

发表于 2023-9-19 20:49:15 来自手机 | 显示全部楼层
下一页 发表于 2023-9-19 20:11
你得看交叉编译还是本地编译,如果是交叉编译,要么有下位机CPU的编译器,要不有下位机CPU型号,好自己找 ...
(引用自32楼)

我这个一点不通,只是看到别人的确是这样玩,板子拿来就内置了啥班图的操作系统还是啥来着,然后常规的c代码直接拿来运行就是,如果你说的情况之一包含了我描述里面类似的话,那估计就是你说那样了
因为楼主我感觉也和我得这方面水平不相上下,如果他描述的就是无需额外的,那么就应该类似我理解的了。哈哈有点绕?

出10入12汤圆

发表于 2023-9-19 22:24:57 来自手机 | 显示全部楼层
今天刚搞完openwrt 上的应用,做了一个4G路由器

出75入8汤圆

 楼主| 发表于 2023-9-20 08:40:13 | 显示全部楼层
我是一个大白菜 发表于 2023-9-19 18:49
只要是正确编译的,可以运行。推荐你还是找找这方面的教学视频,先了解一下 ...
(引用自30楼)

好的,谢谢。

出75入8汤圆

 楼主| 发表于 2023-9-20 08:40:41 | 显示全部楼层
1a2b3c 发表于 2023-9-19 19:56
这个不就是现在那些玩树莓派一类的不就这样吗?
板子(芯片)相当于已经是一台电脑了,你在电脑上面编一个h ...
(引用自31楼)

好的,明白了。

出75入8汤圆

 楼主| 发表于 2023-9-20 08:41:38 | 显示全部楼层
下一页 发表于 2023-9-19 20:11
你得看交叉编译还是本地编译,如果是交叉编译,要么有下位机CPU的编译器,要不有下位机CPU型号,好自己找 ...
(引用自32楼)

虚拟机UBUNTU编译,谢谢。

出75入8汤圆

 楼主| 发表于 2023-9-20 08:42:40 | 显示全部楼层
1a2b3c 发表于 2023-9-19 20:49
我这个一点不通,只是看到别人的确是这样玩,板子拿来就内置了啥班图的操作系统还是啥来着,然后常规的c ...
(引用自33楼)

大部分开发都是这样,板子环境都搞好了那种,这个是别人故意搞的。

出75入8汤圆

 楼主| 发表于 2023-9-20 08:43:09 | 显示全部楼层
442502587 发表于 2023-9-19 22:24
今天刚搞完openwrt 上的应用,做了一个4G路由器
(引用自34楼)

智慧路灯这个用的多。

出75入8汤圆

 楼主| 发表于 2023-9-20 08:46:44 | 显示全部楼层
我是一个大白菜 发表于 2023-9-19 17:41
简单的,cat /proc/cpuinfo  这个命令可以看到处理器信息;
uname -a  这个命令可以看到linux的内核信息 ...
(引用自19楼)

那我再请教一下兄弟,是不是都要MAKEFILE编写?

出0入131汤圆

发表于 2023-9-20 08:57:29 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-20 08:46
那我再请教一下兄弟,是不是都要MAKEFILE编写?
(引用自40楼)

建议你购买一个gpt4的账号,直接问gpt4,

我也不懂linux,但是我在gpt4的帮助下,成功移植了 wince下面的古老程序。

gpt4,可以帮助你写makefile,还可以吧你写的makefile发给它,它能帮你检查错误。

你这些问题gpt4都不是问题。

出0入42汤圆

发表于 2023-9-20 10:17:38 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-20 08:46
那我再请教一下兄弟,是不是都要MAKEFILE编写?
(引用自40楼)

linux下的c/c++程序编译,用makefile比较好管理,其实keil好用的原因就是他帮我们做好了makefile。B站有相关的视频,可以先了解一下。

出75入8汤圆

 楼主| 发表于 2023-9-20 10:56:01 | 显示全部楼层
asj1989 发表于 2023-9-20 08:57
建议你购买一个gpt4的账号,直接问gpt4,

我也不懂linux,但是我在gpt4的帮助下,成功移植了 wince下面 ...
(引用自41楼)

好的,谢谢。之前买过一个,上不了外网就没用了。

出75入8汤圆

 楼主| 发表于 2023-9-20 10:56:19 | 显示全部楼层
我是一个大白菜 发表于 2023-9-20 10:17
linux下的c/c++程序编译,用makefile比较好管理,其实keil好用的原因就是他帮我们做好了makefile。B站有 ...
(引用自42楼)

好的,谢谢。

出0入0汤圆

发表于 2023-10-3 23:28:09 来自手机 | 显示全部楼层
不要以单片机开发的思维方式来搞linux。二进制应用程序能不能运行看架构的,只要是同个架构的,或者兼容的都是可以运行的,跟具体的cpu型号没啥关系只要是同个架构就行。有关安装驱动啥的那还要看跑的系统版本紧密相关的,不过应用的话宽松点,跟编译工具和动态库有点关系,静态编译能提高很多兼容性

出75入8汤圆

 楼主| 发表于 2023-10-5 08:59:22 | 显示全部楼层
3050311118 发表于 2023-10-3 23:28
不要以单片机开发的思维方式来搞linux。二进制应用程序能不能运行看架构的,只要是同个架构的,或者兼容的 ...
(引用自45楼)

谢谢,还真是这样了,目前还处于单片机思维状态。

出0入37汤圆

发表于 2023-10-8 14:47:02 | 显示全部楼层
ZHAOBAO511 发表于 2023-9-19 17:14
另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LI ...
(引用自16楼)

关键是编译器,他给了你编译器,你不用管他芯片是什么。直接掉Linux的api就行,
如果他没给你交叉编译器,你看看在目标机也就是这个板子上能跑gcc吗,能的话就在目标机上编译

如果没编译器,就得要芯片型号,找对应的交叉编译器了

出75入8汤圆

 楼主| 发表于 2023-10-8 16:14:41 | 显示全部楼层
下一页 发表于 2023-10-8 14:47
关键是编译器,他给了你编译器,你不用管他芯片是什么。直接掉Linux的api就行,
如果他没给你交叉编译器 ...
(引用自47楼)

好的,谢谢。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-30 00:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表