使用弱声明覆盖 C 代码中的 GCC 链接器符号

2024-01-10

我正在构建一个精灵目标。我有一个链接器脚本,我在其中输入一些符号位置,例如(这些符号在不同的位置定义,例如下面提供地址的 ROM),

A = 0x12345678;
B = 0x1234567c;
D = 0x1234568c;

在 C 代码中,我可以使用这些变量 A 和 B,而无需声明它们,这是预期的。 我想知道是否可以覆盖符号 D,即我当前的可执行文件可以有自己的 D 声明。在这种情况下,链接器应该忽略 D。有没有办法将链接器脚本中的符号声明为“弱”?以便链接器仅当未在任何链接对象中声明时才可以使用“输入符号”。


Use PROVIDE指示

PROVIDE(D = 0x1234568c);

From ld 文档 http://docs.adacore.com/live/wave/binutils-stable/html/ld/ld.html#PROVIDE

在某些情况下,仅当符号被引用并且未被链接中包含的任何对象定义时,链接描述文件才需要定义该符号。 …… 另一方面,如果程序定义了……链接器将默默地使用程序中的定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用弱声明覆盖 C 代码中的 GCC 链接器符号 的相关文章

  • 有没有办法将 fopen_s() 与 GCC 一起使用,或者至少创建一个 #define ?

    MSVC 编译器说fopen 已弃用 建议使用fopen s 有什么办法可以使用吗fopen s 并且仍然便携 任何想法 define 微软的 s函数是不可移植的 我通常使用等效的 C89 C99 函数并禁用弃用警告 define CRT
  • 在 Ubuntu 上用 C 项目编译和链接 GTK 3

    我相信这不是重复的问题 在发布此问题之前我已经看过所有问题 答案 我想我这里的情况有所不同 我使用Ubuntu 12 04并下载GTK 2 和 3 我从 GNOME 网站复制了一个简单的 GTK 源代码 但是当我在终端中使用这个命令时 gc
  • 为什么 -march=native 很少使用?

    对于大多数 C C 编译器 有一个可传递给编译器的标志 march native 它告诉编译器调整为主机 CPU 的微架构和 ISA 扩展生成的代码 即使它的名称不同 基于 LLVM 的编译器通常也有一个等效的选项 例如rustc or s
  • 分析 ELF 部分和符号大小的工具

    我需要一种方法来分析 ARM 的 GCC 编译器的输出文件 我正在为裸机进行编译 并且我非常关心大小 我可以用arm none eabi objdump由交叉编译器提供 但如果存在用于此任务的工具 则解析输出并不是我渴望做的事情 您知道存在
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 错误:“std::this_thread”尚未声明

    我尝试使用 std this thread sleep for 函数但收到错误 error std this thread has not been declared 包括标志 GLIBCXX USE NANOSLEEP 还需要什么来强制它
  • 为什么 ld 无法从 /etc/ld.so.conf 中的路径找到库?

    我想添加 opt vertica lib64进入系统库路径 所以我执行以下步骤 1 添加 opt vertica lib64 into etc ld so conf 然后运行ldconfig 2 检查 bash ldconfig p gre
  • 无关的库链接

    我有一个可能有点愚蠢的问题 因为我很确定我可能已经知道答案了 假设你有静态库A 动态共享库B和你的linux下的程序C 假设库 A 调用库 B 中的函数 并且您的程序调用库 A 中的函数 现在假设 C 在 A 中调用的所有函数都不使用 B
  • 错误:“uint16_t”未声明? [复制]

    这个问题在这里已经有答案了 我有代码 include
  • gcc 中 -g 选项的作用是什么

    我看到很多关于 gdb 的教程要求在编译 c 程序时使用 g 选项 我无法理解 g 选项的实际作用 它使编译器将调试信息添加到生成的二进制文件中 此信息允许调试器将代码中的指令与源代码文件和行号相关联 拥有调试符号可以使某些类型的调试 例如
  • 为什么 GCC 交叉编译不构建“crti.o”?

    在尝试为arm构建gcc 4 x x交叉编译器时 我陷入了缺失的困境crti o文件在 BUILD DIR gcc子目录 An strace在顶层Makefile表明编译后的xgcc正在调用交联器ld with crti o 作为一个论点
  • CPU Relax 指令和 C++11 原语

    我注意到许多使用特定于操作系统的原语实现的无锁算法 例如所描述的自旋锁here http locklessinc com articles locks 使用 Linux 特定的原子原语 经常使用 cpurelax 指令 使用 GCC 可以通
  • 如何编译GCC生成的asm?

    我正在玩一些汇编代码 有些事情困扰着我 我编译这个 include
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • C99 中数组的静态大小[重复]

    这个问题在这里已经有答案了 一个非常简单的 C 程序 include
  • 错误 LNK2005: xxx 已在 MSVCRT.lib(MSVCR100.dll) C:\something\LIBCMT.lib(setlocal.obj) 中定义

    我正在使用 DCMTK 库来读取 Dicom 文件 医学图像处理中使用的图像格式 我在编译此 DCMTK 源代码时遇到问题 DCMTK 使用一些额外的外部库 zlib tiff libpng libxml2 libiconv 我知道所有库都
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 要求编译器发出无分支/恒定时间代码

    在密码学中 任何依赖于秘密数据 例如私钥 的代码都必须在恒定时间内执行 以避免侧信道定时攻击 https en wikipedia org wiki Timing attack 目前最流行的架构 x86 64 和 ARM AArch64 都

随机推荐

  • 在 BigQuery 中“创建表为”

    如何根据结果创建表格select在 BigQuery 中查询 例如 create table abc as select x y z from mnp 有什么方法或解决方法可以在 BigQuery 中实现相同的目的吗 有线索吗 只需尝试在创
  • 如何从 Codeigniter 中的控制器调用模型?

    我想要一个网页 主要内容是通过ajax视图使用的 和一个菜单侧边栏 我的应用程序视图文件夹是 pages home templates header footer 我的主页控制器是
  • 如何?解析器 PDF 到 Javascript 数组?

    如何使用 JavaScript 手动将 PDF 文档解析为单词数组 我不关心图像 数字 表格 只关心单词 因为我可以将其作为 JavaScript 对象来使用 有一个著名的 JavaScript 库叫做jspdf https code go
  • 什么是reverse()?

    当我有时阅读 Django 代码时 我会在一些模板中看到reverse 我不太确定这是什么 但它与 HttpResponseRedirect 一起使用 这是如何以及何时reverse 应该使用吗 reverse Django 文档 http
  • java/maven如何解决运行时的依赖冲突

    抱歉我的新手问题 假设我有一个包 A 它在其 Maven 文件中声明 B C 作为其依赖项 B C 使用两个不同版本的 log4j 进行日志记录 我有一些问题 如果我使用maven 并将B C声明为A的依赖项 当maven从mavencen
  • 如何解决 @typescript-eslint/no-var-requires 错误。添加@axe-core/react时出错

    我已通过以下方式将 axe core react 添加到我的项目中 npm install save dev axe core react 现在 我在 index tsx 中添加了以下代码以使其启动并运行 if process env NO
  • Angular2日期管道自动添加时区到日期

    我有一个日期字符串 像这样1987 06 15T00 00 00 000Z 当我在其上添加日期管道时 日期显示不同的日期 例如Jun 14 1987在美国时区 但在印度 它显示正确 div 1987 06 15T00 00 00 000Z
  • R :在已部署的 ShinyApp 中仅加载一次 .RData

    我需要部署一个 ShinyApp闪亮服务器 https www rstudio com products shiny shiny server 要运行 我的应用程序需要来自 RData文件 300 Mo 这 RData文件加载了load 语
  • 检查一个对象是否属于Java中的一个类[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来验证对象是否属于给定的类 例如 我可以这样做 if a getClass new MyClass getClass do something 但这需要每次都动态实例化一个新对象 然后将其丢弃
  • 核心数据和 NSUserDefaults-notes 应用程序之间的区别

    创建一个预算应用程序 不是为了发布 只是一些快速而肮脏的东西 我注意到在启动主从模板时 Apple 使用 Core Data 和 NSFetch 结果来填充表格 想想 iPad 上的 Notes 我缺乏经验且不专业的编程本能不会三思而后行
  • 在 Vim 中重命名当前文件

    我应该如何在 Vim 中重命名当前文件 例如 我正在编辑person html erb spec rb 我希望将其重命名为person haml spec rb 我想继续编辑person haml spec rb 我该如何优雅地做到这一点
  • 所有物理驱动器的列表

    如何获取 UWP Windows 10 应用程序中所有物理驱动器的列表 我尝试使用Windows Storage KnownFolders 但这样我只能从库中获取文件夹 In UWP你不能像这样列出所有文件 驱动器 使用官方 API 这是设
  • 如何理解Seaborn的热图标注格式

    我正在寻找一种方法将 0 0045 显示为 0 45 seaboarn的热图 通过指定fmt关键词 sns heatmap data annot True fmt 但是 我没有找到要使用的格式列表 在不同的示例之间搜索 我看到了 d 2g
  • 我无法在 gitlab 的 wiki 功能中添加到美人鱼流程图的超链接

    我想使用我的流程图作为目录 它还按时间顺序模糊地表示并行事件的进展及其彼此之间的关系 我知道使用 Markdown 创建这些图表 通过为 B 节点添加 单击 行 当将鼠标悬停在该节点上时 我可以看到光标发生变化 就好像它是一个链接一样 但任
  • 动态链接自定义路径未应用于 Firebase 身份验证

    我已经设置了Firebase 动态链接具有以下格式的 URL a b c d 然而 emails由 发送Firebase 身份验证包含格式的动态链接a b c link 代替a b c d link 这意味着它们不起作用 我跟着本指南 ht
  • 快速为所有出现的字符串着色

    这段代码 var textSearch hi var textToShow hi hihi hi var rangeToColor textToShow as NSString rangeOfString textSearch var at
  • AWS S3:如何删除存储桶中目录的所有内容但不删除目录本身?

    我有一个 AWS S3 存储桶 名为static mysite com 该存储桶包含一个名为的目录html 我想使用 AWS 命令 行界面删除html目录 但不是目录本身 我该怎么做 此命令也会删除该目录 aws s3 rm s3 stat
  • 编译(但不运行)Python 脚本[重复]

    这个问题在这里已经有答案了 我想检查脚本是否有语法错误 在 2 x 和 3 x 中 如何编译脚本而不运行它 python m py compile script py
  • 有没有更简单的方法来说明所有平台都支持 Delphi 组件/控件?

    为了使 Delphi 组件 控件可用于所有 当前 可用的平台 我必须编写 ComponentPlatforms pidWin32 or pidWin64 or pidOSX32 or pidiOSSimulator or pidiOSDev
  • 使用弱声明覆盖 C 代码中的 GCC 链接器符号

    我正在构建一个精灵目标 我有一个链接器脚本 我在其中输入一些符号位置 例如 这些符号在不同的位置定义 例如下面提供地址的 ROM A 0x12345678 B 0x1234567c D 0x1234568c 在 C 代码中 我可以使用这些变