ld相关内容

可以使用LD_PRELOAD加载不同版本的glibc吗?

字符转换 big-old-app 链接到旧版本的 glibc ,例如 glibc-2.12 .我无能为力. cute-new-addon.o 已链接到更新版本 glibc-2.23 .此 glibc-2.23 位于非标准路径中(因为我没有sudo权限). 故事 我想在 big-old-app 中使用 cute-new-addon.o .我通常会编写一个脚本来执行 big-old ..
发布时间:2021-05-11 18:56:45 其他开发

"-Wl,option"和"-Wl,option"之间有区别吗?和"-Xlinker选项"GCC的语法?

我一直在浏览一些配置文件,并且看到它们都被使用了(尽管在不同的体系结构上).如果您在Linux机器上使用GCC,则将选项传递到链接器的两种语法之间是否有区别? 在阅读GCC手册时,据我所知它们几乎完全相同. 解决方案 来自 man gcc : -Xlinker选项 通过选项作为链接器的选项.您可以使用它来提供GCC不知道如何识别的系统特定的链接器选项. 如果要传递带 ..
发布时间:2021-05-09 20:57:26 其他开发

当将可执行文件与a链接时,为什么ld需要-rpath-link而又需要一个so?

我很好奇.我创建了一个共享对象: gcc -o liba.so -fPIC-共享的liba.c 还有一个共享对象,它与前一个对象链接: gcc -o libb.so -fPIC-共享的libb.c liba.so 现在,当创建链接到 libb.so 的可执行文件时,我将必须指定-rpath-link到ld,以便在发现时可以找到 liba.so libb.so 依赖于它: gcc ..
发布时间:2021-05-09 20:57:22 其他开发

如何在C中的链接描述文件中访问变量定义?

在链接描述文件中,我定义了 PROVIDE(__ KERNEL_BEGIN__ =.); . 可以从以下地址访问地址: extern uint32_t __KERNEL_BEGIN __ []; 但是,以下操作不起作用(给出了错误的地址): extern uint32_t * __KERNEL_BEGIN__; 我看了看大会.第一种方法 __ KERNEL_BEGIN __ ..
发布时间:2021-05-09 20:55:18 其他开发

如何使用ld手动运行产生elf可执行文件?

我正在设法弄清生成可执行文件时链接过程的工作方式.为此,我正在阅读伊恩·泰勒(Ian Taylor)的博客系列,但其中有很多目前,它还超出了我的范围-所以我想看看它在实践中是如何工作的. 此刻,我生成了一些目标文件,并通过gcc将它们链接为: gcc -m32 -o test.o -c test.cgcc -m32 -o main.o -c main.cgcc -m32 -o测试main ..
发布时间:2021-05-09 20:54:39 其他开发

g ++既是c ++编译器又是链接器?

我正在查看我在Eclipse中构建的输出.我正在交叉编译ColdFire处理器.编译行如下所示: m68k-elf-g ++ -O2 -falign-functions = 4 -IC:\ nburn \ include -IC:\ nburn \ MOD52 ... 之后是更多包含文件,明显的“编译器"标志,最后是我更改的一个源文件.下一行再次调用相同的工具: m68k-elf-g ..
发布时间:2021-05-09 20:29:36 C/C++开发

是否可以链接到共享库而不访问库本身?

我拥有共享库的头文件,但没有共享库或其源代码. 我仍然可以针对该库编译一些代码吗? 如果没有,则共享库包含哪些信息而不包含在标头中? 解决方案 我仍然可以针对该库编译一些代码吗? 编译:是的.链接:也许吧. 您可以创建一个虚拟库进行链接.例如.如果标题包含: int library_func(void *); 然后: //dummy_lib.cint ..
发布时间:2021-05-04 18:31:15 服务器开发

我的Linux可执行程序中的段00是什么(64位)

这是一个非常简单的汇编程序,执行后只需返回 12 . $ cat a.asm全局_start.text部分_start:mov rax,60;系统调用退出mov rdi,12岁;退出代码12系统调用 它可以正确构建和执行: $ nasm -f elf64 a.asm&&ld a.o&&./a.out ||回声$?12 但是a.out的大小很大,超过了4k: $ wc -c a. ..
发布时间:2021-05-04 18:30:37 服务器开发

Binutils LD创建巨大的文件

我正在尝试创建尽可能小的ELF.我创建了这样的测试文件(NASM语法): SECTION .textdd 0xdeadbeef 使用此链接描述文件: SECTIONS {.文本 : {*(.文本)}} 然后我检查了平面二进制文件和ELF的大小,构建了两种方法: nasm -f bin -o test test.asm 它是平面二进制,所以是4个字节. nasm -f e ..
发布时间:2021-04-23 20:07:33 其他开发

CMake:不要为链接中使用的单个库设置rpath

我要做的是配置CMakeLists文件,以便在构建项目时,链接器使用驻留在构建树中的共享库(.so)的副本来链接可执行文件,但不设置链接的可执行文件中的rpath,以便系统在加载程序请求库时必须提供该库. 具体地说,我想在没有安装libOpenCL.so作为系统库的构建服务器场上的构建期间链接到libOpenCL.so.为此,libOpenCL.so位于项目构建树中,并使用CMakeList ..
发布时间:2021-04-22 19:48:55 服务器开发

为什么`-fvisibility-inlines-hidden`不是默认值?

我要看看我的理解是否正确. inline 是C ++编译器的建议,建议在看起来更好时就替换一个函数,因此从库外部调用标记为内联的过程应该是不可靠的,并且从逻辑上讲,它们应该被隐藏默认情况下,阻止其他人调用它们作为对编译器或代码库的更新可以更改决定(从而删除 inline d函数和ABI损坏?). 但是,这似乎不是默认设置,应该设置 -fvisibility-inlines-hidden ..
发布时间:2021-04-19 19:30:14 C/C++开发

gcc ld:确定静态库链接顺序的方法

我的可执行文件与许多静态库链接,在Linux上通常有50至100个存档.有时,这些档案中存在依赖性周期.这些库在链接命令行上出现的顺序很重要,请参见 简短答案:使用-start-group liblist -end-group 完成 出于某些原因: 一个ld组是 smart .它不只是循环文件.它会初次通过组,但会记住符号.因此,在随后的遍历中,它将使用缓存的符号表信息,因此非常 ..
发布时间:2021-04-19 19:29:23 C/C++开发

为什么此函数指向自身偏移量为1?

我正在尝试使用C为Nucleo-64 Stm32F401re板编写裸机闪烁程序.但是,在开始调试错误时(它还没有闪烁),我发现了一个奇怪的地址,但没有找到任何解释.这是反汇编的相关部分的输出: blink.elf:文件格式elf32-littlearm.text部分的反汇编:08000000 ..
发布时间:2021-04-09 19:26:54 其他开发

如何在动态打开的共享库的条目上设置断点?

对于某些情况,我正在使用实验性事务性内存模型(使用g ++编译)检查一个简单的C ++程序.我想确切地知道register_tm_clones的调用位置(您可以通过转储一个简单的程序来查看fn).即使在int main() {}之类的程序中,也会调用此函数. 我想知道在通用程序的整个范围中哪里调用了register_tm_clones.我在GDB中为其设置了一个断点并回溯: Break ..
发布时间:2020-11-13 02:03:22 服务器开发

地址的含义0x8048080

为什么当我在gdb中调试asm源时是0x8048080为代码的起始入口点选择的地址?这只是相对偏移量,而不是指令存储器中的实际偏移量,对吗? 解决方案 地址0x8048080没有特殊意义,但地址0x08048000有一个特殊含义. 后一个地址是默认地址,在Linux/x86上,ld在该默认地址上开始第一个PT_LOAD段.在Linux/x86_64上,默认值为0x400000,您可以 ..
发布时间:2020-11-13 01:41:23 服务器开发

丢弃GCC中未使用的功能

在MinGW下使用GCC进行编译时,我需要一些帮助. 说我有2个文件: a.c包含2个函数a1和a2 b.c包含2个函数b1和b2. 然后,我将2个对象链接到共享库中.使用的命令如下: gcc -c a.c gcc -c b.c gcc -shared -Wl, --version-script v.ver -Wl, -Map=out.map -Wl, --strip-all - ..
发布时间:2020-11-13 00:04:40 其他开发