问题标签 [ld]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1873 浏览

gcc - ARM STR7xx 的加载程序脚本

我正在尝试使用 Eclipse + CDT + yagarto (gnu toolchain) + OpenOCD 对 ARM 进行编程。在几个示例项目(例如来自 yagarto 站点)中,我发现了链接器脚本 (*.ld),其中指定了许多链接信息(以及节定义)。实际上我以前没有遇到过这些文件(IAR 不需要它们),我发现它们乍一看有点难以理解。所以我的问题是我是否可以在我的所有项目中为我的目标处理器(STR710FZ2T6)使用一个这样的脚本文件,或者我必须熟悉编写这些脚本并为每个项目编写它们。如果我可以为特定目标处理器的所有项目使用单个文件,请您建议我在哪里可以找到这样的通用文件。

0 投票
2 回答
865 浏览

c - 关于重复符号的奇怪 ld 错误

我有一个项目,包含两个文件,main.c 和 logoff.c。当我尝试编译它们时,出现此错误:

我在 logoff.c 中有一个名为 logoff 的函数,但我在 main.c 中搜索了文本“logoff”,但什么也没找到(甚至还没有调用该函数!)。

如果我将函数的名称更改为 log_off 它可以工作。文件中有第二个函数会导致相同的错误,除非它的名称也被更改。

有什么原因会发生这种情况吗?我在两个不同的系统上有这个问题。可能相关的一件事是我在另一个项目中使用了相同的 logoff.c 文件,但它没有连接到这个。

0 投票
4 回答
26420 浏览

binary - 使用 GNU ld 链接器脚本包含二进制文件

我有一个有效的链接器脚本。我想添加另一个数据部分,其内容是直接从文件中提取的(ld 不应该解析它并提取这些部分等等)。我怎样才能做到这一点?

0 投票
4 回答
1405 浏览

linux - GCC/ELF - 我的符号从何而来?

有一个可执行文件动态链接到共享对象的数量。我如何确定某个符号(导入可执行文件)属于其中的哪一个?

如果有不止一种可能性,我可以模拟 ld 并查看它是从哪里拍摄的吗?

0 投票
2 回答
8375 浏览

gcc - 从 LD 隐藏共享对象中的符号

我有两个第三方库偶尔会导出相同的符号名称。加载可执行文件时,ld通常会选择错误的文件,结果导致我崩溃。我不能对这些库的内容做太多,所以可能有一种方法可以指导ld如何找到正确的实施方式?

操作系统 - Solaris 10,我的程序是由 autoconf/autotools/gcc 构建的,冲突的库是libclntsh(Oracle 驱动程序的一部分)和 OpenLDAP。不幸的是,我不能使用 Oracle 的 LDAP 客户端实现——它缺少 OpenLDAP 的许多功能。

编辑:链接如下:libclntsh.so->A.so->MAIN<-B.so<-libldap_r.so

0 投票
5 回答
20143 浏览

c++ - 您将如何列出已编译库中包含的可用函数等?

如何确定函数是否存在于库中,或列出已编译库中的函数?

0 投票
3 回答
3650 浏览

gcc - 使用 gcc/g++ 和 ld 的配置文件链接时间

我正在使用 g++ 编译和链接一个由大约 15 个 c++ 源文件和 4 个共享对象文件组成的项目。最近链接时间增加了一倍多,但我没有可用的 makefile 的历史记录。有什么方法可以分析 g++ 以查看链接的哪一部分需要很长时间?

编辑:在我注意到 makefile 一直在使用 -O3 优化之后,我设法通过删除该开关将链接时间减半。有没有什么好方法我可以在没有反复试验的情况下找到这个?

编辑:我实际上对分析 ld 的工作原理并不感兴趣。我有兴趣知道如何将链接时间的增加与特定的命令行开关或目标文件相匹配。

0 投票
3 回答
8882 浏览

linux - 在 Linux 上将符号链接到固定地址

如何使用 GNU ld 将(某些)符号链接到特定的固定地址,以便二进制文件仍然可以在 Linux(x86)中正常执行?不会对这些符号进行任何访问,但它们的地址很重要。

例如,我将具有以下结构:

我想链接foobar到地址 0x76543210,但要正常链接标准库和应用程序的其余部分。然后应用程序将使用 foobar 的地址,但不会引用它后面的(可能不存在的)内存。

这个请求的基本原理是这个相同的源可以在两个平台上使用:在本机平台上,Register32可以简单地是 a volatile uint32_t,但在 Linux 上是一个与定义 egRegister32的 a 大小相同的 C++ 对象,然后它将使用地址对象并使用该地址(和数据)向通信框架发送请求,以执行对远程硬件的实际访问。因此,链接器将确保结构的字段引用正确的“地址”。uint32_toperator=Register32

0 投票
3 回答
61364 浏览

linux - makefile 中的 -I 和 -L 有什么区别?

makefile 中 -I 和 -L 标志的用途是什么?

0 投票
2 回答
2585 浏览

linker - 等效于 GNU LD --export-dynamic 标志的 Solaris 链接器

就像问题所说:我们正在使用 GNU 链接器在 Linux 上构建,并在 Solaris 上使用 solaris ld。GNUld支持以下--export-dynamic标志:

创建动态链接的可执行文件时,将所有符号添加到动态符号表中。动态符号表是在运行时从动态对象可见的符号集。

使用 solaris 链接器的这个标志的等价物是什么? 没有等价物?