问题标签 [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.
c++ - 为什么 g++ 不与我创建的动态库链接?
我一直在尝试制作一些都依赖于同一个库的应用程序,而动态库是我的第一个想法:所以我开始编写“库”:
然后我编译“库”
然后我快速编写了一个使用库的文件:
然后我尝试用
但它不会编译并出现以下错误:
我想我错过了一些非常明显的东西,请帮助我:)
assembly - 单声道“asmonly”选项
我使用打印“hello world”的 MonoDevelop 创建了一个简单的单声道可执行文件。我想尝试 AOT 'asmonly' 选项。所以:
为什么我得到分段错误?我正在使用 Fedora 12 x64。ld中的“找不到条目符号_start”错误是什么?
谢谢你!
c - 将共享库重新链接到不同版本的 libc
我有一个使用特定版本的 libc (GLIBC2.4) 编译的 linux 共享库 (.so),我需要在具有不同版本的 libc 的系统上使用它。我没有相关库的源代码,因此无法为新系统重新编译。是否有可能将该库中的依赖项更改为不同的 libc?
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
我需要做什么?
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有类似的东西吗?
gcc - ELF 共享库:重定位偏移超出范围
有一个软件包elfutils
,其中包含一个名为eu-elflint
检查 ELF 二进制文件的程序(就像lint
C 一样——因此得名)。
出于好奇,我用这个工具检查了我们自己的共享库,发现了很多问题,例如:
作为交叉检查,我从下面的源代码构建了一个非常简单的共享库
并再次尝试...
正如您所看到的,即使是微不足道的示例也显示出很多问题。
顺便说一句:我在 Ubuntu-Karmic-32bit 上使用 gcc v4.4.1
顺便说一句:......在 Debian-Lenny-64bit 和 gcc v4.2.4 上也会发生同样的情况
这是我应该关心的事情吗?
c++ - 将静态库转换为共享库(从 libsome.a 创建 libsome.so):我的符号在哪里?
这个问题的标题完全是骗人的,但是那个问题的答案对我没有帮助。
我有一堆目标文件打包在一个静态库中:
我想从 libsome.a 而不是目标文件生成 libsome.so,但该库实际上是准系统:
静态库没问题,或者至少我完全能够将它链接到可执行文件并让它运行包含的功能。另外,如果我从 foo.o 和 bar.o 创建 libsome.so,一切都很好。
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,我实际上没有收到错误,但我不知道为什么。我的链接器是:
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 上链接时需要这种抽象级别。