问题标签 [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 投票
5 回答
24133 浏览

c++ - 为什么 g++ 不与我创建的动态库链接?

我一直在尝试制作一些都依赖于同一个库的应用程序,而动态库是我的第一个想法:所以我开始编写“库”:

然后我编译“库”

然后我快速编写了一个使用库的文件:

然后我尝试用

但它不会编译并出现以下错误:

我想我错过了一些非常明显的东西,请帮助我:)

0 投票
2 回答
258 浏览

assembly - 单声道“asmonly”选项

我使用打印“hello world”的 MonoDevelop 创建了一个简单的单声道可执行文件。我想尝试 AOT 'asmonly' 选项。所以:

为什么我得到分段错误?我正在使用 Fedora 12 x64。ld中的“找不到条目符号_start”错误是什么?

谢谢你!

0 投票
3 回答
4545 浏览

c - 将共享库重新链接到不同版本的 libc

我有一个使用特定版本的 libc (GLIBC2.4) 编译的 linux 共享库 (.so),我需要在具有不同版本的 libc 的系统上使用它。我没有相关库的源代码,因此无法为新系统重新编译。是否有可能将该库中的依赖项更改为不同的 libc?

0 投票
5 回答
38867 浏览

c - 函数的隐式声明

我刚刚使用标题组织了我的代码,但正如我所做的那样,我收到了一个警告,在链接时变成了错误。

我有一个代码(使用标题内的函数)test.c,如下所示:

我的test1.h标题是这样的:

并且在test1.c

当我尝试编译代码时,我得到了这个:

ubuntu@eeepc:~/Development/Test$ gcc -o test.o -c test.c -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs
test.c:在函数'main'中:
test.c:11:警告:隐式函数“测试”的声明<br> ubuntu@eeepc:~/Development/Test$

当时这只是一个简单的警告,但是当我尝试链接它时......

ubuntu@eeepc:~/Development/Test$ ld -T linker.ld -o kernel.bin loader.o test.o
test.o: In function Testing'main':
test.c:(.text+0xfc): undefined reference to

我需要做什么?

0 投票
2 回答
2321 浏览

linux - solaris elfedit:linux 有类似的东西吗?(共享库编辑器)?

Linux:有没有办法编辑已编译的共享库?

具体来说,我正在搜索如何DT_SYMBOLIC flag在已编译的二进制共享库上添加?

这就是我问这个的原因

我们的应用程序由

  • 我们自己的库(静态libXXX.a)
  • 一些第 3 方库(仅二进制共享库 libYYY.so)

到目前为止,该应用程序一切正常。

现在我用共享库版本 (libXXX.so)替换了我们自己的静态* libXXX.a 库。

一切编译和链接都很好。

但是,当我现在运行应用程序时,它会启动并执行大量预期的处理 - 然后它在中途某处崩溃。gdb 回溯显示崩溃发生在某些第 3 方共享库中。

我在 SOF 上四处搜索,发现这里有一篇有趣的文章。

我指的提示是

尽管我怀疑它是否真的有帮助,但我认为它可能值得一试。

有什么想法可以DT_SYMBOLIC flag在已编译/链接的共享库上添加吗?

环境:debian lenny 64bit,带有 g++ v4.2.4 和 binutils v20。

编辑:在 solaris 上有一个名为elfedit. linux有类似的东西吗?

0 投票
1 回答
950 浏览

gcc - ELF 共享库:重定位偏移超出​​范围

有一个软件包elfutils,其中包含一个名为eu-elflint检查 ELF 二进制文件的程序(就像lintC 一样——因此得名)。

出于好奇,我用这个工具检查了我们自己的共享库,发现了很多问题,例如:

作为交叉检查,我从下面的源代码构建了一个非常简单的共享库

并再次尝试...

正如您所看到的,即使是微不足道的示例也显示出很多问题。

顺便说一句:我在 Ubuntu-Karmic-32bit 上使用 gcc v4.4.1

顺便说一句:......在 Debian-Lenny-64bit 和 gcc v4.2.4 上也会发生同样的情况

这是我应该关心的事情吗?

0 投票
2 回答
13239 浏览

c++ - 将静态库转换为共享库(从 libsome.a 创建 libsome.so):我的符号在哪里?

这个问题的标题完全是骗人的,但是那个问题的答案对我没有帮助。

我有一堆目标文件打包在一个静态库中:

我想从 libsome.a 而不是目标文件生成 libsome.so,但该库实际上是准系统:

静态库没问题,或者至少我完全能够将它链接到可执行文件并让它运行包含的功能。另外,如果我从 foo.o 和 bar.o 创建 libsome.so,一切都很好。

0 投票
1 回答
229 浏览

gcc - 在 ELKS 上使用 gcc

我正在使用PocketDOS来模拟ELKS,但我想使用gccand对其进行开发ld,我该怎么做?

0 投票
4 回答
10831 浏览

c - 通过环境变量告诉 ld 在哪里寻找目录

我正在为一个班级评分 C 和 C++ 文件,这个作业使用 GSL 库。由于我的计算机没有 root 权限,我的 GSL 库安装在我的主目录中,因此我需要告诉编译器和链接器在哪里可以找到它。

当我自己编写程序时,这不是问题,因为我只是在 gcc 中添加了适当的 -L 和 -I 标志。

但是当我编译学生的文件时,我不想编辑他们的每一个makefile。相反,我想将适当的目录放入环境变量中,以便它无缝地发生。

为此,我使用库或包含位置导出了以下变量:C_INCLUDE_PATH、CPLUS_INCLUDE_PATH、LIBRARY_PATH 和 LD_LIBRARY_PATH

但是当我编译一个学生的项目时,

我收到以下错误:

我正在使用 gcc v 4.1.2。如果我使用 gcc v 4.4,我实际上没有收到错误,但我不知道为什么。我的链接器是:

0 投票
3 回答
83760 浏览

ubuntu - ld 链接问题:/usr/bin/ld: 找不到 [libraryname]

我使用 Qmake 在 Ubuntu 9.10 上构建共享库

此共享库 (A) 依赖于另一个共享库 (B)。

B项目建设成功。

在项目 A 的 .pro 文件中,我的 LIBS 变量如下所示:

(我使用了完整的 shlib 名称,因为库版本不同。)

无论如何,当我尝试构建项目 A 时,它会在链接阶段中断,并打印错误消息:

从错误消息中,我以为 ld 抱怨它找不到 libdatelib 文件,所以我手动将它复制到 /usr/lib/

但是,这并没有解决问题,并且我收到了相同的错误消息。

任何人都知道如何解决这个问题?

[编辑]

我对使用 gcc 进行构建非常陌生。我知道如何创建符号链接,但我应该为 lnk 命令使用哪些路径?我要链接的文件在 /home/username/work/cppdev/datelib/bin 中。

此外,我使用的构建系统 (qmake) 会自动创建符号链接作为构建的一部分,因此我的 /home/username/work/cppdev/datelib/bin 文件夹中已经有以下文件:

  • libdatelib_release.so(符号链接)
  • libdatelib_release.so.1(符号链接)
  • libdatelib_release.so.1.0(符号链接)
  • libdatelib_release.so.1.0.0(共享库)

我可能不得不问另一个问题来解释为什么有这么多符号链接(有什么意义?),以及为什么我不能直接链接到共享库,而必须通过符号链接。我已经阅读了一些在线文档,但到目前为止我所看到的似乎更像是格言/传统,而不是实际的技术原因。为什么在 Linux 上链接时需要这种抽象级别。