【发布时间】:2018-01-28 17:46:19
【问题描述】:
问题是在以下问题的上下文中:Why are libraries not found, even though they are clearly on the -L path?。似乎我的库和我的目标文件具有不同的 ELF 格式,这可能会导致链接器无法“找到”库。
现在,这引出了几个问题:
看来我的编译器通常会生成 SYSV ELF 文件。 (与
file核对)。然而,对于那个特定的 C++ 源,它会生成一个 Linux/GNU ELF 目标文件。我想知道为什么,所以我将该源减少为一个空的 main 方法 - 突然我得到一个 SYSV 目标文件。 C++ 源文件中的哪些内容会导致编译器切换 ELF 格式?我不能将 Linux/GNU 与 SYSV ELF 链接在一起是真是假?
是否有强制编译器创建某种 ELF 格式的选项?
我正在使用 Cray g++ (GCC) 5.3.0 20151204。
【问题讨论】:
-
你发现什么了吗?
-
@DustinOprea:不是这样。这个问题有一个完全不同的原因。但由于它最终在没有解决 SYSV 问题的情况下工作,我得出结论,可能可以将这些格式链接在一起。
-
我也沿着这条路走,虽然符号明显在正确的 .so 中,但有一个加载器“符号查找错误”,并且“链接对象”显示每个 ldd 的正确文件