SYSV 与 Linux/GNU ELF 格式

问题描述 投票:0回答:1

问题是在以下问题的上下文中:为什么找不到库,即使它们显然位于 -L 路径上?。看来我的库和目标文件具有不同的 ELF 格式,这可能会导致链接器无法“找到”库。

现在,这引出了几个问题:

  1. 看来我的编译器正常生成SYSV ELF文件。 (用

    file
    检查)。但是,对于特定的 C++ 源代码,它会生成 Linux/GNU ELF 目标文件。我想知道为什么,所以我将该源减少为一个空的主方法 - 突然我得到了一个 SYSV 对象文件。 C++ 源文件中的什么内容可以导致编译器切换 ELF 格式?

  2. 我无法将Linux/GNU与SYSV ELF链接在一起是真是假?

  3. 是否有一个选项可以强制编译器创建某种ELF格式?

我正在使用 Cray g++ (GCC) 5.3.0 20151204。

linux gcc elf
1个回答
0
投票

关于问题1:答案之一似乎是

STT_GNU_IFUNC
类型的函数将导致编译器/链接器将相应目标文件的
ELF
文件格式从
SYSV
切换为
GNU/Linux

但是,我仍然不知道如何识别目标文件中类型为

STT_GNU_IFUNC
的函数。查看
GNU/Linux
objdump
readelf
nm
的目标文件仍然没有显示
STT_GNU_IFUNC
类型的单个函数。

有关

STT_GNU_IFUNC
的更多信息可以在 https://www.airs.com/blog/archives/403 以及以下相关问题中找到:如何在 Linux 上编译以与所有发行版共享?

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