ZHAOBAO511 发表于 2023-9-19 13:08:09

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

如题,用ARMGCC编译后咋执行的?WINDOWS是EXE形式,那LINUX是怎么执行的?

kv2004 发表于 2023-9-19 13:16:35

好像有可执行属性就能执行,./文件名 就能运行了

ZHAOBAO511 发表于 2023-9-19 13:43:45

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

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

蓝蓝的恋 发表于 2023-9-19 14:05:37

ZHAOBAO511 发表于 2023-9-19 13:43
谢谢,那自动执行咋执行?
(引用自3楼)

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

ZHAOBAO511 发表于 2023-9-19 14:10:39

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

好的,谢谢

Nuker 发表于 2023-9-19 14:26:01

linux的可执行文件是elf格式,windows的exe文件是pe格式

polarbear 发表于 2023-9-19 15:48:25

ZHAOBAO511 发表于 2023-9-19 13:43
谢谢,那自动执行咋执行?
(引用自3楼)

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

jenkins 发表于 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 $?
~ #

位卑未敢忘忧国 发表于 2023-9-19 16:39:16

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

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

我是一个大白菜 发表于 2023-9-19 16:42:36

看看这个脚本/etc/init.d/rc.local.sh ,一般开机启动可以添加在这个文件里

ZHAOBAO511 发表于 2023-9-19 17:08:01

Nuker 发表于 2023-9-19 14:26
linux的可执行文件是elf格式,windows的exe文件是pe格式
(引用自6楼)

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

ZHAOBAO511 发表于 2023-9-19 17:08:32

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

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

ZHAOBAO511 发表于 2023-9-19 17:09:12

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

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

ZHAOBAO511 发表于 2023-9-19 17:10:03

位卑未敢忘忧国 发表于 2023-9-19 16:39
兄弟你这是认真的吗?真这样干了?
(引用自9楼)

{:lol:} 这样干很少的。

ZHAOBAO511 发表于 2023-9-19 17:10:29

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

谢谢,您这个我试试看。

ZHAOBAO511 发表于 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地址。兄弟,我感觉是在玩我。{:lol:} 难道不用引入头文件这些?虽然通过坛友知道了这个芯片型号,但是问题是客户这样做真的是不是可以?

albert_w 发表于 2023-9-19 17:20:28

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

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

ZHAOBAO511 发表于 2023-9-19 17:37:17

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

好的,谢谢,我再看看。

我是一个大白菜 发表于 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_demodemo.c -static,类似这样吧,可以规避一点不匹配的问题。
至于你说的头文件引用缺少的问题,这个是你编译环境决定的,搞个虚拟机运行ubuntu,交叉编译目标板程序,可以看看正点原子,韦东山等linux程序开发入门,基本就了解了。

McuY 发表于 2023-9-19 17:41:47

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

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

ZHAOBAO511 发表于 2023-9-19 17:45:59

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

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

ZHAOBAO511 发表于 2023-9-19 17:46:24

McuY 发表于 2023-9-19 17:41
芯片型号都不知道,怎么知道用哪个编译器。
(引用自20楼)

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

span42 发表于 2023-9-19 17:46:27

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

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

我是一个大白菜 发表于 2023-9-19 17:53:47

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

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

ZHAOBAO511 发表于 2023-9-19 18:08:03

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

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

ZHAOBAO511 发表于 2023-9-19 18:09:09

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

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

ZHAOBAO511 发表于 2023-9-19 18:09:28

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

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

albert_w 发表于 2023-9-19 18:10:57

依赖不多的程序可以的. go语言直接一句命令编译各个平台的二进制文件, 你想他哪知道目标芯片是啥
他把库都静态编译进去了

ZHAOBAO511 发表于 2023-9-19 18:12:07

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

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

我是一个大白菜 发表于 2023-9-19 18:49:09

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

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

1a2b3c 发表于 2023-9-19 19:56:52

这个不就是现在那些玩树莓派一类的不就这样吗?
板子(芯片)相当于已经是一台电脑了,你在电脑上面编一个helloword难道还要去知道电脑cpu到底是用的amd的还是英特尔的?

下一页 发表于 2023-9-19 20:11:46

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

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

1a2b3c 发表于 2023-9-19 20:49:15

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

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

442502587 发表于 2023-9-19 22:24:57

今天刚搞完openwrt 上的应用,做了一个4G路由器

ZHAOBAO511 发表于 2023-9-20 08:40:13

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

好的,谢谢。

ZHAOBAO511 发表于 2023-9-20 08:40:41

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

好的,明白了。

ZHAOBAO511 发表于 2023-9-20 08:41:38

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

虚拟机UBUNTU编译,谢谢。

ZHAOBAO511 发表于 2023-9-20 08:42:40

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

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

ZHAOBAO511 发表于 2023-9-20 08:43:09

442502587 发表于 2023-9-19 22:24
今天刚搞完openwrt 上的应用,做了一个4G路由器
(引用自34楼)

智慧路灯这个用的多。

ZHAOBAO511 发表于 2023-9-20 08:46:44

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

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

asj1989 发表于 2023-9-20 08:57:29

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

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

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

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

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

我是一个大白菜 发表于 2023-9-20 10:17:38

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

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

ZHAOBAO511 发表于 2023-9-20 10:56:01

asj1989 发表于 2023-9-20 08:57
建议你购买一个gpt4的账号,直接问gpt4,

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

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

ZHAOBAO511 发表于 2023-9-20 10:56:19

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

好的,谢谢。

3050311118 发表于 2023-10-3 23:28:09

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

ZHAOBAO511 发表于 2023-10-5 08:59:22

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

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

下一页 发表于 2023-10-8 14:47:02

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

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

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

ZHAOBAO511 发表于 2023-10-8 16:14:41

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

好的,谢谢。
页: [1]
查看完整版本: 请教万能的朋友们,LINUX用C开发编译出来的文件是怎么执行的?