社区首页 >问答首页 >为什么在链接的时候,gcc会抱怨,而ld不会?

为什么在链接的时候,gcc会抱怨,而ld不会?
EN

Stack Overflow用户
提问于 2016-05-31 01:28:04
回答 1查看 495关注 0票数 0

ARM汇编器示例文件:

代码语言:javascript
代码运行次数:0
复制
    .global _start
_start: 
    mov r0, #0x1

    mov r7, #1
    swi 0

文件可以使用以下任一方法组装:

代码语言:javascript
代码运行次数:0
复制
as -o example.o example.s
gcc -c -o example.o example.s

和对象文件可以与ld链接

代码语言:javascript
代码运行次数:0
复制
ld -o example example.o

代码语言:javascript
代码运行次数:0
复制
gcc -o example example.o

抱怨有以下几点

代码语言:javascript
代码运行次数:0
复制
example.o: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/crt1.o:/build/glibc-6f8a9a/glibc-2.19/csu/../ports/sysdeps/arm/start.S:79: first defined here
/usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/crt1.o: In function `_start':
/build/glibc-6f8a9a/glibc-2.19/csu/../ports/sysdeps/arm/start.S:119: undefined reference to `main'

背景资料:我正在尝试从《ARM汇编语言,威廉·霍尔》中学习ARM汇编。我有使用ARMv4T的第一版。我在树莓派1 (ARMv6)上运行代码。所以,我拼凑了来自各地的信息,试图让示例运行。这一点难倒我了。任何一般的指示都非常感谢。谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-05-31 03:17:31

麦克尔·佩奇的评论是正确的。使用名为main的全局变量会导致C运行时用于处理程序的启动和结束。

我们作弊只是为了让事情变得简单一点。我们在汇编程序中编写了一个C主函数,它只返回2;。这样我们的程序就更容易了,因为C运行时为我们处理了程序的初始化和终止。..。这是必需的,因为C运行时将调用main。如果它不是全局的,它将不能被C运行时调用,并且链接阶段将失败。

http://thinkingeek.com/2013/01/09/arm-assembler-raspberry-pi-chapter-1/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37535522

复制
相关文章
MySQL如何删除#sql开头的临时表
巡检时发现服务器磁盘空间不足,通过查看大文件进行筛选是发现有几个#sql开头的文件,且存在超过100G及10G以上的文件。
俊才
2019/12/24
5.7K0
Google 的 Firebase 如何删除项目
https://www.ossez.com/t/google-firebase/13792
HoneyMoose
2021/11/02
3.2K0
Google 的 Firebase 如何删除项目
Linux CentOS删除或重命名文件夹和文件的办法
Linux、CentOS操作系统下如何删除和重命名文件夹呢?办法如下: 一、Linux、CentOS下重命名文件和文件夹 mv:move 用移动文件命令就可以了,因为linux系统没有专门的重命名命令。 基本格式: 移动文件:mv 文件名 移动目的地文件名 重命名文件:mv 文件名 修改后的文件名 示例:mv oldfilename newfilename (oldfilename为旧文件名,newfilename为新文件名) 二、Linux、CentOS下删除文件和文件夹 通常情况下,删除文件用:rm 文件名。删除文件夹用:rmdir 文件夹名。 但是rmdir不能删除非空的文件夹,那如何删除非空文件夹呢:命令:rm -rf 非空文件夹名; -r 就是向下递归,不管有多少级目录,一并删除。 -f 就是直接强行删除,不作任何提示的意思。 1、删除文件夹命令 rm -rf /var/log/httpd/access 将会删除/var/log/httpd/access目录以及其下所有文件、文件夹 2、删除文件命令 rm -f /var/log/httpd/access.log 将会强制删除/var/log/httpd/access.log这个文件 建议使用前做好备份,好像此命令是不会放到回收站的,删了就再也见不着下面的文件了。
红色扛把子
2019/03/16
4.5K0
在Oracle中,如何移动或重命名数据文件?
其实利用OS拷贝也可以联机操作,不关闭数据库,但是只针对可以OFFLINE的数据文件,步骤如下所示:
AiDBA宝典
2023/04/27
1.8K0
在Oracle中,如何移动或重命名数据文件?
删除,重命名文件
重命名文件----rename #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> //修改文件名 void REname(char *arr) { int ret=rename("你好世界.txt", arr); if (ret == 0) { printf("修改成功"); } else { printf("修改失败"); } } void test01() { char buf[] = "你好,世界.txt"; REname(b
大忽悠爱学习
2021/03/02
1.7K0
删除,重命名文件
如何创建、更新和删除SQL 视图
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
用户4988376
2021/07/16
1.6K0
删除或关闭Word中的超链接
最近使用的word老是会把一些文字内容或者标题转换成乱七八糟的格式,看的莫名其妙的,找了好久也不知道什么问题,后来一查才知道是因为这些文字包含超链接,word自动转换了。。。你说是不是莫名其妙。
marsggbo
2019/05/26
2.6K0
tr - 转换或删除文件中的字符
# 把文件中的所有小字字母都转换成大写字母 tr "a-z" "A-Z" < /etc/passwd # 删除字符中所有出现的ab tr -d "ab" # 多行合并一行,并添加分割符 cat /etc/passwd | tr "\n" " "
陳斯托洛夫斯記
2022/10/27
1.5K0
【Jetpack】Room 中的销毁重建策略 ( 创建临时数据库表 | 拷贝数据库表数据 | 删除旧表 | 临时数据库表重命名 )
在 Android 中使用 Room 操作 SQLite 数据库 , 如果 SQLite 数据库表 修改比较繁琐 ,
韩曙亮
2023/10/11
4720
【Jetpack】Room 中的销毁重建策略 ( 创建临时数据库表 | 拷贝数据库表数据 | 删除旧表 | 临时数据库表重命名 )
java删除文件,重命名文件
在做项目时,遇到需要对文件做一些删除重命名等操作。基于java语言,保存代码段如下。
全栈程序员站长
2022/08/12
1.8K0
MySQL 临时表的建立及删除临时表的使用方式
MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。
用户4988376
2021/08/12
10.8K1
linux中文件重命名_如何在Linux中重命名文件?
This tutorial will walk you through the simple steps to rename a file in Linux.
全栈程序员站长
2022/09/30
8.3K0
如何删除或替换EasyPlayer流媒体播放器的loading样式?
在上几期的文章中,我们介绍了关于EasyPlayer流媒体播放器的最近更新功能及优化,感兴趣的用户可以翻阅我们往期的文章进行了解。H.265网页播放器EasyPlayer不仅实现了视频实时录像的解决办法,而且还能支持在iOS上实现低延时直播,其灵活的视频能力,极大满足了用户的多样化场景需求。
TSINGSEE青犀视频
2022/07/26
9070
Excel-筛选带删除线的数据并删除
今天同事使用 Excel 的时候遇到一个需求,有些内容不在需要时会被标记删除线,后面再删除,但是由于数据比较多,不方便一个个删除,有没有什么办法能删除标记了删除线的内容所在的行呢?(这里有个疑问:删除线为什么不能删除?)
CoderJia
2024/10/18
4390
Excel-筛选带删除线的数据并删除
了解vSphere中的BPDU筛选器功能
本文介绍并提供了有关vSphere 5.1 Distributed Switch中新BPDU筛选器功能的示例。 一、什么是bpdu 桥接协议数据单元(BPDU)是在物理交换机之间交换的帧,作为生成树协议(STP)的一部分。STP用于防止网络中的环路,通常在物理交换机上启用。当物理交换机端口上的链路上升时,STP协议开始计算和BPDU交换以确定端口是否应处于转发或阻塞状态。桥接协议数据单元(BPDU)帧跨物理交换机端×××换以识别根网桥并形成树形拓扑。VMware的vSwitch不支持STP,也不参与BPDU交换。如果在vSwitch上行链路上接收到BPDU帧,则丢弃该帧。同样,VMware vSwitch不会生成BPDU帧。 注意:VMware vSwitches(标准和分布式)无法形成循环,因为无法在OSI层的第2层将两个虚拟交换机连接在一起。因此,没有生成树协议功能已合并到虚拟交换机中。
孙杰
2019/10/29
2.3K0
linux中如何给文件重命名_ppt重命名怎么恢复
mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令等同于DOS系统下的ren和move命令的组合。它的使用权限是所有用户。
全栈程序员站长
2022/10/02
3.5K0
文件重命名或替换指定内容
import java.io.BufferedReader; import java.io.CharArrayWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class NameUtils { public static void main(String[]
JQ实验室
2022/02/10
1K0
如何获取任何网址或网页的Google缓存时限?
在使用互联网的过程中,我们经常会遇到一些网页无法访问或已被删除的情况。然而,有时候我们仍然希望能够查看这些已删除或无法访问的网页的内容。这就需要我们利用谷歌的缓存功能来获取网页的缓存版本。本文将介绍如何获取任何网址或网页的Google缓存时限,并提供相应的代码演示。
疯狂的KK
2023/08/05
4550
如何获取任何网址或网页的Google缓存时限?
Google Earth Engine(GEE)——地物大小的筛选
形态学就是确定影像地物的显示大小和方式, focal_max(),focal_min(),focal_median(),和 focal_mode()实例的方法Image类。(这些是更通用的快捷方式reduceNeighborhood(),它可以将内核中的像素输入到任何具有数字输出的筛选器中筛选。形态算子可用于执行诸如腐蚀、膨胀、打开和关闭之类的操作。例如,使用focal_min()后跟focal_max()确定地物的大小显示。
此星光明
2024/02/01
1740
Google Earth Engine(GEE)——地物大小的筛选
如何在 Pandas DataFrame中重命名列?
分析人员重命名列名称的动机之一是确保这些列名称是有效的Python属性名称。这意味着列名称不能以数字开头,而是带下画线的小写字母数字。好的列名称还应该是描述性的,言简意赅,并且不应与现有的DataFrame或Series属性冲突。
五分钟学大数据
2022/10/05
5.6K0
如何在 Pandas DataFrame中重命名列?

相似问题

没有临时筛选器视图的共享Google工作表中的范围排序

20

Google筛选视图问题

10

当通过Google表单输入新数据时,如何自动刷新Google中的筛选器视图?

100

如何删除Google电子邮件的垃圾邮件筛选器

20

如何在使用google工作表中的筛选视图时添加行计数?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档