ld 相关问题

ld(链接器或加载器)程序将目标文件,归档文件和(参考)共享库组合在一起,将其数据和地址与符号引用一起重定位。链接通常是编译程序的最后一步。


`gcc-undef`导致`找不到entry符号_start`;默认为x

当运行gcc -undef file.c上,在包含主要功能的文件上,我会从ld中获得此警告: /usr/bin/ld:警告:找不到条目符号_start;默认为0000000000401020 ...

c gcc ld
回答 1 投票 0

“ -rPath-link”和`-l`?

黄金国家的人: -l dir, - library-Path dir 将目录添加到搜索路径 - -RPATH-LINK DIR 添加DIR到链接时间共享库搜索路径 BFD LD的男人制造...

回答 1 投票 0



在 Debian 12 上使用 GNU ld 链接 libvulkan(未定义参考)的问题

我想用Vulkan学习编程。我的第一步是枚举系统上可用的 Vulkan 扩展数量。所以我写了这个简单的代码: #包括 #包括 我想用 Vulkan 学习编程。我的第一步是枚举系统上可用的 Vulkan 扩展数量。所以我写了这个简单的代码: #include <iostream> #include <vulkan/vulkan.hpp> int main(int argc, char *argv[]) { VkResult ret; unsigned int propertyCount; ret = vkEnumerateInstanceExtensionProperties(NULL, &propertyCount, NULL); if (ret != VK_SUCCESS) return 1; std::cout << "Vulkan: Extension Count: " << propertyCount << std::endl; return 0; } 当我尝试编译和链接代码时,出现 undefined reference 错误: $ g++ -lvulkan -o vkExtension vkExtension.cpp /usr/bin/ld: /tmp/user/1000/ccgB9M9N.o: in function `main': vkExtension.cpp:(.text+0xc99): undefined reference to `vkEnumerateInstanceExtensionProperties' collect2: error: ld returned 1 exit status $ 虽然 libvulkan 安装在我的系统上(Debian 12): $ cd /usr/lib/x86_64-linux-gnu $ ls -la | grep libvulkan -rw-r--r-- 1 root root 8575696 Mar 22 2023 libvulkan_intel_hasvk.so -rw-r--r-- 1 root root 11115728 Mar 22 2023 libvulkan_intel.so -rw-r--r-- 1 root root 6918024 Mar 22 2023 libvulkan_lvp.so -rw-r--r-- 1 root root 8711344 Mar 22 2023 libvulkan_radeon.so lrwxrwxrwx 1 root root 14 Feb 6 2023 libvulkan.so -> libvulkan.so.1 lrwxrwxrwx 1 root root 20 Feb 6 2023 libvulkan.so.1 -> libvulkan.so.1.3.239 -rw-r--r-- 1 root root 457224 Feb 6 2023 libvulkan.so.1.3.239 $ 我也检查了库本身是否缺少功能(符号),但应该在已安装的库中可用。命令 nm 不会列出任何符号,因为库已被删除。所以我用了readelf: $ readelf -s --wide libvulkan.so.1.3.239 | grep vkEnumerateInstance 136: 0000000000034850 687 FUNC GLOBAL DEFAULT 12 vkEnumerateInstanceExtensionProperties 170: 0000000000034b00 639 FUNC GLOBAL DEFAULT 12 vkEnumerateInstanceLayerProperties 283: 0000000000034d80 709 FUNC GLOBAL DEFAULT 12 vkEnumerateInstanceVersion $ 我还检查了链接器(GNU ld)的默认库搜索路径,但路径是正确的。 缺少什么? (SO上也有类似的问题。但不幸的是没有答案。) 更新 似乎问题与GNU GCC/ld相关。尝试使用 clang++/LLVM 构建代码,成功了: $ clang++ -Wall -Wextra -lvulkan -o vkExtension vkExtension.cpp vkExtension.cpp:5:14: warning: unused parameter 'argc' [-Wunused-parameter] int main(int argc, char *argv[]) ^ vkExtension.cpp:5:26: warning: unused parameter 'argv' [-Wunused-parameter] int main(int argc, char *argv[]) ^ 2 warnings generated. $ ./vkExtension Vulkan: Extension Count: 20 $ 也更新了问题标题。 我已经解决了这个问题。这是我的第 8 层(使用)问题。 链接参数的库必须在带有GCC/G++的源之后,当然,不能在之前: $ g++ -o vkExtension vkExtension.cpp -lvulkan 完全忘记了GCC/G++的这种行为。抱歉,其他 SO 用户浪费了您的时间。

回答 1 投票 0

如何使用 gcc 编译带有源代码文件的库存档?

TL;DR - 我需要用 test.o 编译 archive.a 以生成可执行文件。 背景 - 我试图从我正在修改的软件包中调用一个单独的库中的函数,但该函数(...

回答 1 投票 0

如何正确编译zimg而不出现ld错误?

我正在尝试编译 zimg 作为 Debian 11 上其他一些软件的先决条件。由于所需的最低版本比 apt 提供的最新版本更新,我别无选择,只能编译...

回答 1 投票 0

当我尝试与 LD 链接时,Windows 版 MinGW 无法工作

我现在正在用 C 语言开发一个测试操作系统...并且我一直在查看 http://www.osdever.net/tutorials/view/brans-kernel-development-tutorial 来开始。我获得了 Windows 7(64 位)的 MinGW。我看...

回答 1 投票 0

GCC:- 在 Linux 上链接库以创建 so 文件时无法找到 libpthread_nonshared.a 文件

嗨,我正在尝试在 Ubuntu 20.04 中使用 gcc 10.2 编译一个 c 项目。 但最后它给了我如下错误 /usr/bin/ld: 找不到 /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a 收集2:错误...

回答 1 投票 0

在 ELKS 上使用 gcc

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

回答 3 投票 0

GNU ld 的 --audit 标志有什么作用?

我有一个应用程序,我想使用 Linux 提供的 rtld-audit 接口来挂钩共享库加载过程。如果我使用 LD_AUDIT 环境变量来电话,这会非常有用...

回答 2 投票 0

g++ 链接库 ld 没有

我想知道为什么 g++ test1.o test2.o -o test.x -lgtk-x11-2.0 有效,同时 ld'r test1.o test2.o -o test.o -lgtk-x11-2.0 给出: ld:找不到-lgtk-x11-2.0 除非我明确包括...

回答 2 投票 0

为什么 .data.rel.ro 部分在我的可执行文件中占用如此多的空间?

我想在Linux上构建一个共享库,其中包含一个大的初始化数组,并在不同的可执行文件中使用该数组。 我希望这可以减少编译输出的大小,特别是......

回答 1 投票 0

gcc 11 未链接库构造函数

如何找出在 Ubuntu 22.04 上使用 GCC 11 构建时 gcc 无法链接我的库(仅使用 lib 构造函数)的原因? 我在这里设置了一个小例子来尝试复制问题:https://

回答 1 投票 0

为什么 GNU `ld` 使用等效源与 NASM 和 GAS `.o` 文件有不同的输出?

在受许多关于小型 ELF 可执行文件的有趣文章启发进行一些实验时,我注意到 GNU 的 ld 在输入 nasm 生成的 .o 目标文件或 w...

回答 1 投票 0

crtbegin.o、crtbeginT.o 和 crtbeginS.o 有什么区别?

我正在尝试使用 ld 直接链接来隔离构建问题。 当我包含 /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.so 时,我遇到了一些问题: ac-aaa.o:在函数`

回答 2 投票 0

如何将程序加载到内存中与预期地址不同的地址?

通常,用户程序二进制文件将加载到程序地址空间的低地址(通常在 0x400000 左右),该地址空间将在 elf 二进制文件中指定(在 Linux 的情况下)。 我们可以...

回答 1 投票 0

ld:架构 x86_64 的未定义符号

我制作了一个 nasm 程序集 hello world 程序,如下所示: 全局启动 节.文本 开始: 莫夫拉克斯,0x20000004 莫夫RDI,1 lea rsi,[相关消息] mov rdx, msg.len 系统调用 我...

回答 1 投票 0

用于处理未指定部分的链接器脚本表示法

我有一个目标文件,其中有一堆我不关心的编译器生成的部分。当我使用链接器脚本将平面二进制文件链接在一起时,我有时可以看到这些部分放置在...

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.