SYSV与Linux/GNU ELF格式

Mic*_*ael 7 c++ linux gcc elf

问题出在以下问题的背景下:为什么找不到库,即使它们显然位于-L路径上?.我的库和我的目标文件似乎有不同的ELF格式,这可能导致链接器无法"找到"库.

现在,这导致了几个问题:

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

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

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

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

小智 0

关于问题1:答案之一似乎是type的函数STT_GNU_IFUNC会导致编译器/链接器将ELF相应目标文件的文件格式SYSVGNU/Linux.

但是,我仍然不知道如何识别目标文件中类型为 的函数STT_GNU_IFUNC。查看带有 的目标文件GNU/Linuxobjdumpreadelf仍然nm没有显示类型为 的单个函数STT_GNU_IFUNC

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