请教万能的朋友们,LINUX用C开发编译出来的文件是怎么执行的?
如题,用ARMGCC编译后咋执行的?WINDOWS是EXE形式,那LINUX是怎么执行的? 好像有可执行属性就能执行,./文件名 就能运行了 kv2004 发表于 2023-9-19 13:16好像有可执行属性就能执行,./文件名 就能运行了
(引用自2楼)
谢谢,那自动执行咋执行?
ZHAOBAO511 发表于 2023-9-19 13:43
谢谢,那自动执行咋执行?
(引用自3楼)
可以设置开机自启动,网上一大把教程 蓝蓝的恋 发表于 2023-9-19 14:05
可以设置开机自启动,网上一大把教程
(引用自4楼)
好的,谢谢
linux的可执行文件是elf格式,windows的exe文件是pe格式 ZHAOBAO511 发表于 2023-9-19 13:43
谢谢,那自动执行咋执行?
(引用自3楼)
我一般在串口上挂一片STM32F103, 上电的时候,输入上的命令行, 程序就开机自动运行了 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 $?
~ #
polarbear 发表于 2023-9-19 15:48
我一般在串口上挂一片STM32F103, 上电的时候,输入上的命令行, 程序就开机自动运行了 ...
(引用自7楼)
兄弟你这是认真的吗?真这样干了? 看看这个脚本/etc/init.d/rc.local.sh ,一般开机启动可以添加在这个文件里 Nuker 发表于 2023-9-19 14:26
linux的可执行文件是elf格式,windows的exe文件是pe格式
(引用自6楼)
谢谢,我是说ARMGCC编译一个例如:打印HELLWORD的C小程序,怎么让它开机能运行起来。 polarbear 发表于 2023-9-19 15:48
我一般在串口上挂一片STM32F103, 上电的时候,输入上的命令行, 程序就开机自动运行了 ...
(引用自7楼)
这个没见过这样用的,说实话,不过也谢谢您。 jenkins 发表于 2023-9-19 16:16
busybox开机自动启动ftp服务的脚本
~ # cat /etc/init.d/S99ftp
#!/bin/sh
(引用自8楼)
好的,不过您这个有点复杂,说实话,也谢谢您。 位卑未敢忘忧国 发表于 2023-9-19 16:39
兄弟你这是认真的吗?真这样干了?
(引用自9楼)
{:lol:} 这样干很少的。 我是一个大白菜 发表于 2023-9-19 16:42
看看这个脚本/etc/init.d/rc.local.sh ,一般开机启动可以添加在这个文件里
(引用自10楼)
谢谢,您这个我试试看。 本帖最后由 ZHAOBAO511 于 2023-9-19 17:18 编辑
我是一个大白菜 发表于 2023-9-19 16:42
看看这个脚本/etc/init.d/rc.local.sh ,一般开机启动可以添加在这个文件里
(引用自10楼)
另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LINUX系统,让我调试串口,我以前从来没这样玩过,就是没芯片型号ARMGCC能随便编译?关键是只能用C,给了个网络IP地址。兄弟,我感觉是在玩我。{:lol:} 难道不用引入头文件这些?虽然通过坛友知道了这个芯片型号,但是问题是客户这样做真的是不是可以? ZHAOBAO511 发表于 2023-9-19 17:14
另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LI ...
(引用自16楼)
我也是外行, 主要看cpu指令集, glibc, libgcc的版本 albert_w 发表于 2023-9-19 17:20
我也是外行, 主要看cpu指令集, glibc, libgcc的版本
(引用自17楼)
好的,谢谢,我再看看。 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程序开发入门,基本就了解了。 ZHAOBAO511 发表于 2023-9-19 17:14
另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LI ...
(引用自16楼)
芯片型号都不知道,怎么知道用哪个编译器。 我是一个大白菜 发表于 2023-9-19 17:41
简单的,cat /proc/cpuinfo这个命令可以看到处理器信息;
uname -a这个命令可以看到linux的内核信息 ...
(引用自19楼)
谢谢,那就是说可以不用知道内核信息就可以直接编译?我现在是用UBUNTU+VMWARE,以前我用过交叉编译,就是WINDOWS下编译,都是二进值的结果,那个编译后也是二进制结果去运行吗?非常感谢您的回复,谢谢。 McuY 发表于 2023-9-19 17:41
芯片型号都不知道,怎么知道用哪个编译器。
(引用自20楼)
问题就在这里,客户说不用知道就可以。 ZHAOBAO511 发表于 2023-9-19 17:14
另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LI ...
(引用自16楼)
可以,要板子对应的交叉编译器,里边包含了基本的库
Linux下操作串口就像读写文件一样 ZHAOBAO511 发表于 2023-9-19 17:45
谢谢,那就是说可以不用知道内核信息就可以直接编译?我现在是用UBUNTU+VMWARE,以前我用过交叉编译,就 ...
(引用自21楼)
1,交叉编译工具适配这个板子的内核,换句话说这个目标板子的内核用的什么交叉编译工具,你也用一样的,目前看来可能达不到这个要求;2.或者是用静态编译,可以不一定和目标板的内核交叉编译工具一致。
你看看先满足哪一个,基本上简单的tcp,udp,串口之类的程序,都可以在目标板上运行的 span42 发表于 2023-9-19 17:46
可以,要板子对应的交叉编译器,里边包含了基本的库
Linux下操作串口就像读写文件一样 ...
(引用自23楼)
好的,谢谢,我再想想看。 我是一个大白菜 发表于 2023-9-19 17:53
1,交叉编译工具适配这个板子的内核,换句话说这个目标板子的内核用的什么交叉编译工具,你也用一样的, ...
(引用自24楼)
那编译出来的是二进制BIN文件在LINUX主机上运行吗? 我是一个大白菜 发表于 2023-9-19 17:53
1,交叉编译工具适配这个板子的内核,换句话说这个目标板子的内核用的什么交叉编译工具,你也用一样的, ...
(引用自24楼)
那编译出来的是二进制文件在LINUX主机上运行吗? 依赖不多的程序可以的. go语言直接一句命令编译各个平台的二进制文件, 你想他哪知道目标芯片是啥
他把库都静态编译进去了 albert_w 发表于 2023-9-19 18:10
依赖不多的程序可以的. go语言直接一句命令编译各个平台的二进制文件, 你想他哪知道目标芯片是啥
他把库都 ...
(引用自28楼)
客户直接定死C语言,后边他们还要加内容。 ZHAOBAO511 发表于 2023-9-19 18:09
那编译出来的是二进制BIN文件在LINUX主机上运行吗?
(引用自26楼)
只要是正确编译的,可以运行。推荐你还是找找这方面的教学视频,先了解一下 这个不就是现在那些玩树莓派一类的不就这样吗?
板子(芯片)相当于已经是一台电脑了,你在电脑上面编一个helloword难道还要去知道电脑cpu到底是用的amd的还是英特尔的?
1a2b3c 发表于 2023-9-19 19:56
这个不就是现在那些玩树莓派一类的不就这样吗?
板子(芯片)相当于已经是一台电脑了,你在电脑上面编一个h ...
(引用自31楼)
你得看交叉编译还是本地编译,如果是交叉编译,要么有下位机CPU的编译器,要不有下位机CPU型号,好自己找编译器。 下一页 发表于 2023-9-19 20:11
你得看交叉编译还是本地编译,如果是交叉编译,要么有下位机CPU的编译器,要不有下位机CPU型号,好自己找 ...
(引用自32楼)
我这个一点不通,只是看到别人的确是这样玩,板子拿来就内置了啥班图的操作系统还是啥来着,然后常规的c代码直接拿来运行就是,如果你说的情况之一包含了我描述里面类似的话,那估计就是你说那样了
因为楼主我感觉也和我得这方面水平不相上下,如果他描述的就是无需额外的,那么就应该类似我理解的了。哈哈有点绕? 今天刚搞完openwrt 上的应用,做了一个4G路由器 我是一个大白菜 发表于 2023-9-19 18:49
只要是正确编译的,可以运行。推荐你还是找找这方面的教学视频,先了解一下 ...
(引用自30楼)
好的,谢谢。 1a2b3c 发表于 2023-9-19 19:56
这个不就是现在那些玩树莓派一类的不就这样吗?
板子(芯片)相当于已经是一台电脑了,你在电脑上面编一个h ...
(引用自31楼)
好的,明白了。 下一页 发表于 2023-9-19 20:11
你得看交叉编译还是本地编译,如果是交叉编译,要么有下位机CPU的编译器,要不有下位机CPU型号,好自己找 ...
(引用自32楼)
虚拟机UBUNTU编译,谢谢。 1a2b3c 发表于 2023-9-19 20:49
我这个一点不通,只是看到别人的确是这样玩,板子拿来就内置了啥班图的操作系统还是啥来着,然后常规的c ...
(引用自33楼)
大部分开发都是这样,板子环境都搞好了那种,这个是别人故意搞的。 442502587 发表于 2023-9-19 22:24
今天刚搞完openwrt 上的应用,做了一个4G路由器
(引用自34楼)
智慧路灯这个用的多。 我是一个大白菜 发表于 2023-9-19 17:41
简单的,cat /proc/cpuinfo这个命令可以看到处理器信息;
uname -a这个命令可以看到linux的内核信息 ...
(引用自19楼)
那我再请教一下兄弟,是不是都要MAKEFILE编写? ZHAOBAO511 发表于 2023-9-20 08:46
那我再请教一下兄弟,是不是都要MAKEFILE编写?
(引用自40楼)
建议你购买一个gpt4的账号,直接问gpt4,
我也不懂linux,但是我在gpt4的帮助下,成功移植了 wince下面的古老程序。
gpt4,可以帮助你写makefile,还可以吧你写的makefile发给它,它能帮你检查错误。
你这些问题gpt4都不是问题。 ZHAOBAO511 发表于 2023-9-20 08:46
那我再请教一下兄弟,是不是都要MAKEFILE编写?
(引用自40楼)
linux下的c/c++程序编译,用makefile比较好管理,其实keil好用的原因就是他帮我们做好了makefile。B站有相关的视频,可以先了解一下。 asj1989 发表于 2023-9-20 08:57
建议你购买一个gpt4的账号,直接问gpt4,
我也不懂linux,但是我在gpt4的帮助下,成功移植了 wince下面 ...
(引用自41楼)
好的,谢谢。之前买过一个,上不了外网就没用了。 我是一个大白菜 发表于 2023-9-20 10:17
linux下的c/c++程序编译,用makefile比较好管理,其实keil好用的原因就是他帮我们做好了makefile。B站有 ...
(引用自42楼)
好的,谢谢。 不要以单片机开发的思维方式来搞linux。二进制应用程序能不能运行看架构的,只要是同个架构的,或者兼容的都是可以运行的,跟具体的cpu型号没啥关系只要是同个架构就行。有关安装驱动啥的那还要看跑的系统版本紧密相关的,不过应用的话宽松点,跟编译工具和动态库有点关系,静态编译能提高很多兼容性 3050311118 发表于 2023-10-3 23:28
不要以单片机开发的思维方式来搞linux。二进制应用程序能不能运行看架构的,只要是同个架构的,或者兼容的 ...
(引用自45楼)
谢谢,还真是这样了,目前还处于单片机思维状态。 ZHAOBAO511 发表于 2023-9-19 17:14
另外请教一个问题兄弟,客户拿来一个板子,然后把芯片给擦掉了,说不用看芯片型号就可以,然后里边装了LI ...
(引用自16楼)
关键是编译器,他给了你编译器,你不用管他芯片是什么。直接掉Linux的api就行,
如果他没给你交叉编译器,你看看在目标机也就是这个板子上能跑gcc吗,能的话就在目标机上编译
如果没编译器,就得要芯片型号,找对应的交叉编译器了
下一页 发表于 2023-10-8 14:47
关键是编译器,他给了你编译器,你不用管他芯片是什么。直接掉Linux的api就行,
如果他没给你交叉编译器 ...
(引用自47楼)
好的,谢谢。
页:
[1]