10得票1回答
LD_LIBRARY_PATH和-rpath有什么区别?

在链接库时,-rpath 用于将动态库的地址传递给 ld。我的问题是,如果我在 LD_LIBRARY_PATH 中设置了地址,我是否仍需要在链接过程中加上 -rpath 标志?

9得票2回答
“__exidx_start”和“__exidx_end”是什么?它们有什么作用?

你好,我看到在一个链接脚本里有一段代码"__exidx_start = .;",它将标签值设置为位置计数器 "." 的值。但是这个标签在同一个链接脚本中没有被使用。 在第一行的下面有一个类似的标签,它也是以相同的方式定义的 "__exidx_end = .;"。 这两个标签是.text和....

9得票1回答
为什么GCC会将全局实例的构造函数调用放入不同的部分(根据目标)?

我有一些全局实例的简单声明,这些实例具有非空构造函数,在启动时自动调用这些构造函数。我正在Linux上交叉编译C++到不同的微控制器目标。 对于arm-none-eabi-gcc-4.8.4和rx-elf-gcc-4.8-GNURX_v14.03(GCC 4.8.3),构造函数的调用被放置在...

9得票3回答
如何在ld链接脚本中使用INCLUDE命令

我有两个链接脚本:common.ld定义了一些符号,app.ld使用这些定义来定位节。 如果我只是将这两个文件连接在一起,并将其提供给ld(通过gcc),它可以工作。如果我使用INCLUDE命令: INCLUDE common.ld 我会得到以下错误: ld.exe:标志中的无效...

9得票3回答
可执行文件中全局常量变量的偏移量

希望实现通过修改自己的全局常量来保存可执行文件状态,只是出于拥有完全自包含的可执行文件的乐趣。 一些解决方案/技巧如下: 1.使用libelf并让程序解析自身以找到偏移量。 2.添加特定标记并在可执行文件中搜索它。我觉得这可能甚至在某种程度上是跨平台的? 3.使用对象转储工具确定可执行文件...

8得票1回答
链接问题:输入文件*.o的i386:x86-64架构与i386输出不兼容。

当我将我的osdev移植到linux上时,链接出现了问题。之前在cygwin下使用gcc 3.5.*和binutils 2.18(编译输出为x86_64-elf)可以正常工作。 以下是相关信息: gcc -v Using built-in specs. Target: i686-linux...

8得票1回答
我的链接器文件中的内存属性“p”是什么?

在GCC中,MEMORY命令描述了目标中内存块的位置和大小。必须按照这种方式使用该命令。请参考链接。 MEMORY { name [(attr)] : ORIGIN = origin, LENGTH = len ... } 现在,我有一个链接器文件,由链接器(I...

8得票1回答
在C语言中,访问链接脚本变量的“值”是否属于未定义行为?

GNU ld(链接器脚本)手册第3.5.5源代码参考节中有一些关于如何在C源代码中访问链接器脚本“变量”(实际上只是整数地址)的重要信息。我使用了这些信息来广泛地使用链接器脚本变量,并在此处编写了答案:如何从C中获取ld链接器脚本中定义的变量的值。 然而,很容易做错并犯一个错误,尝试访问链接...

8得票1回答
这个问题是关于STM32H743微控制器(Cortex-M7)的链接脚本中是否使用了所有RAM区段的。

我知道最新的STM32微控制器中RAM存储器包含几个速度差异显著的部分。这就是为什么我正在努力理解这些设备的链接器脚本(注意:arm-none-eabi-gcc 工具链)。不幸的是,CubeMX为STM32F767ZI生成的链接器脚本只忽略了RAM内的不同部分: /* Specify the...

7得票1回答
链接脚本:.bss节的分配

我有一个链接脚本,像这样: OUTPUT_FORMAT(binary) SECTIONS { . = 0xFFFF800000000000 ; .startup_text : { processor.o(.text) } .text : { *(EXCLUDE_FIL...