linker

搬迁地址计算;极低频
linker

搬迁地址计算;极低频

我正在了解有关搬迁的信息ELF 参考和这个博客,但我无法计算搬迁地址。 假设我们有两个文件A,B类型为ET_REL,我们想要合并它们S在链接期间命名的部分;这些部分包括符号SA(在A文件中)和SB(在B)文件中。如果我们在A.elf和中有重定位条目和重定位偏移量B.elf,我不明白链接器如何避免重定位地址冲突:我假设这些偏移量在A.elf和中可能是相同的B.elf,因为这些文件在编译期间不知道彼此。 ET_EXEC 中重定位表的用途是什么?我不明白为什么需要它。 Rela类型重定位中加数的作用是什么? 我认为最重要的是,我对搬迁的具体步骤没有清晰的...

Admin

AIX 上的运行时库搜索顺序
linker

AIX 上的运行时库搜索顺序

如果我理解正确的话,变量LIBPATH和LD_LIBRARY_PATH的优先级高于链接器的参数-blibpath。我正在寻找如何告诉加载程序沿着编译期间指定的路径(即-blibpath或其他路径)搜索库。例如,在linux上,有-rpath,它的优先级高于变量。我正在寻找 AIX 上的模拟。 我还在寻找明确描述在 AIX 上查找库的路径优先级的位置。 ...

Admin

cc 链接器错误
linker

cc 链接器错误

我正在 Debian 12 上编写一个基于 GTKlibrary 的 C 应用程序。 该程序由由 cmake 生成的 Makefile 构建。 源文件的编译阶段是正确的,但是当链接器被触发时,出现以下错误: [ 3%] Linking C executable lux cc: error: -E or -x required when input is from standard input CMakeLists.txt 文件是: # Set the name and the supported language of the project PROJEC...

Admin

如何在Debian环境中加载android二进制文件?
linker

如何在Debian环境中加载android二进制文件?

adbd我正在尝试从 chroot 环境中运行。我可以在 Android 上很好地运行它LD_LIBRARY_PATH=$PWD ./linker64 $PWD/adbd。 当我尝试运行时,./adbd我得到: bash: ./adbd: cannot execute: required file not found。 运行并strace $PWD/adbd返回: execve("/root/adbd", ["/root/adbd"], 0x7fcfe8dfd0 /* 8 vars */) = -1 ENOENT (No such file or direc...

Admin

链接器找不到 libpthread
linker

链接器找不到 libpthread

我正在尝试构建两个程序的 32 位版本,并且都显示相同的错误消息 /usr/bin/ld: cannot find /media/34GB/Arquivos-de-Programas-Linux/Glibc-2.17-32bit/lib/libpthread.so.0 我当然明白为什么它找不到它,因为我将 Glibc 目录从上面的路径移动到: /media/34GB/Arquivos-de-Programas-Linux-32bit/Glibc-2.17/lib/libpthread.so.0 但是,我不知道为什么 ld 会在这个错误的路径中寻找 lib...

Admin

现有的 .so 文件即使存在也无法加载,似乎取决于 Docker 主机操作系统
linker

现有的 .so 文件即使存在也无法加载,似乎取决于 Docker 主机操作系统

我在基于 Alma8 的 Docker 容器中构建了 Qt6,Docker 主机是 Fedora 35。 在某些情况下(如下所述),所有 Qt 库都无法加载libQt6Core.so[.6[.2.4]].但该文件存在,并且会在正确的目录中搜索该文件。libQt6Dbus.so找到并加载其他 Qt 库(例如)。 广泛的调试、重建、搜索网络并没有产生任何线索,根本原因是什么以及我如何修复它。 定位问题 我已将问题范围缩小到以下场景: 我创建了两个最小的虚拟机,一个使用 centos7,另一个使用 alma8。 我将官方存储库中的 Docker 安装到了它们中。...

Admin

如何让介子使用不同lib目录中的库?
linker

如何让介子使用不同lib目录中的库?

我有两个版本的库:zita-convolver3 和 zita-convolver4。系统库是 zita-convolver3,但我想链接 zita-convolver4,它存储在本地用户目录中。 我如何将介子获取到compiler.find_library zita-convolver4而不是优先考虑系统版本zita-convolver3?我可以通过使用 pkg-config 文件并设置 pkgconfig_path 来显式设置它来解决此问题。但有没有一种方法可以只使用介子呢? ...

Admin

RAM如何分为内核空间和用户空间
linker

RAM如何分为内核空间和用户空间

据我了解,在 Linux 中,RAM 分为内核空间和用户空间。内核空间是为运行内核而保留的,用户空间应用程序不应该直接访问那里的内存。 该内存到底是如何划分为内核空间和用户空间的?它是在构建内核时在链接描述文件中定义的吗? ...

Admin

链接器找不到头文件和库文件
linker

链接器找不到头文件和库文件

我已经从这里安装了 CHERI 模拟器关联。 它允许我将 clang 编译器用于 risc-v 和功能扩展的 risc-v 架构。 我定义了以下别名 alias clang-riscv='~/cheri/output/sdk/bin/clang -g -O2 -target riscv64-unknown-freebsd --sysroot="~/cheri/output/rootfs-riscv64-purecap" -fuse-ld=lld -mno-relax -march=rv64gc -mabi=lp64d -Wall -Wcheri' alia...

Admin

在 elf 文件中使用 objcopy / elfedit 来 patchelf 符号(版本)
linker

在 elf 文件中使用 objcopy / elfedit 来 patchelf 符号(版本)

上下文如下:在我的操作系统上(已经)liba.so.v2“liba”,其中包含字符串“symbol_version-2”作为其函数的符号版本,例如functionX@version-2(就我而言,例如刷新@NCURSES6_5.0.19991023 在objdump -T / readelf输出)。有这个新的二进制_a我下载并想运行它。然而,这依赖于以前版本的库,liba.so.v1,其中包含不同的符号版本字符串,例如“symbol_version-1”(在我的例子中wrefresh@NCURSES_5.0.19991023(注意缺少“6”)。 笔记: ...

Admin

使用 cmake 与 libldap 的奇怪链接问题
linker

使用 cmake 与 libldap 的奇怪链接问题

我正在尝试使用 download_an_compile.sh 脚本(使用 CMake 构建二进制文件)从 FlightGear 项目构建 SimGear。到目前为止,构建进展顺利,但是当脚本尝试将构建的对象文件链接到库时,我得到了大量的信息 //usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2: warning: undefined reference to [email protected]_2 (其中...是每条消息的不同函数名称)。现在我想我只需通过添加-DCMAKE_CXX_STANDARD_LIBR...

Admin

LD_PRELOAD 和动态链接器
linker

LD_PRELOAD 和动态链接器

因此,我一直在阅读有关动态衬垫(dl)的预加载功能以及如何使用它来使用 LD_PRELOAD 环境变量加载用户指定的共享库(.so),然后再链接到链接到的所有其他共享库。将加载可执行文件。我在特权升级的背景下读到了它。让我们想知道为什么没有对应用程序尝试加载的内容进行任何类型的控制? 我创建并编译了以下代码: #include <stdio.h> #include <sys/types.h> #include <stdlib.h> void _init() { unsete...

Admin

难道链接器和加载器的存在不依赖于Linux等操作系统吗?
linker

难道链接器和加载器的存在不依赖于Linux等操作系统吗?

链接器(用于执行编译后的链接)和加载器(用于执行可执行文件)的存在是否不依赖于Linux等操作系统? (我曾经认为Linux中的链接器和加载器要么由操作系统提供,要么像其他应用程序一样由软件提供。现在我认为它们非常特殊且不同。无论安装哪个操作系统,它们都可能是相同的。) 链接器和加载器是否存在于机器语言(即 ISA 级别)? (在该级别,没有操作系统。)还是汇编语言级别? 从编程软件的角度来看,将操作系统视为编程库是否正确? 谢谢。 我想知道将链接器和加载器安装到计算机系统的级别/层中的位置。 有关计算机系统的层次/级别,请参阅 Nisan 的《计算机系统要...

Admin

_start 是否调用我的程序的主函数和其他基本设置函数?
linker

_start 是否调用我的程序的主函数和其他基本设置函数?

我正在阅读一本描述加载程序如何工作的教科书: 当加载程序运行时,它将可执行目标文件的块复制到代码和数据段中。接下来,加载器跳转到程序的入口点,该入口点始终是函数的地址。_start_start函数调用系统启动函数,__libc_start_main 从答案来看这个堆栈溢出问题,我们有以下关于执行流程的伪代码: _start: call __setup_for_c ; set up C environment call __libc_start_main ; set up sta...

Admin