问题出在以下问题的背景下:为什么找不到库,即使它们显然位于-L路径上?.我的库和我的目标文件似乎有不同的ELF格式,这可能导致链接器无法"找到"库.
现在,这导致了几个问题:
看来我的编译器通常会生成SYSV ELF文件.(选中file).但是,对于该特定的C++源代码,它会生成Linux/GNU ELF目标文件.我想知道为什么,所以我将该源减少为一个空的main方法 - 然后我突然得到一个SYSV对象文件.C++源文件中的内容可以导致编译器切换ELF格式?
我不能将Linux/GNU与SYSV ELF链接在一起是真是假?
是否有强制编译器创建某种ELF格式的选项?
我正在使用Cray g ++(GCC)5.3.0 20151204.
小智 0
关于问题1:答案之一似乎是type的函数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 上编译以与所有发行版共享?