首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格式错误的mach-o图像:符号表运行__LINKEDIT

格式错误的mach-o图像:符号表运行__LINKEDIT
EN

Stack Overflow用户
提问于 2016-09-08 02:36:13
回答 2查看 3.1K关注 0票数 3

使用新的Xcode 8 GM构建在macOS塞拉利昂的GM上,我重新编译了一个Qt5.7 C++项目,并在尝试启动该应用程序时收到以下错误消息:

原因:没有找到合适的图像。确实发现: /path/to/my/lib/libio_core.dylib:格式错误的mach-o图像:符号表运行__LINKEDIT

这并不发生在调试版本上,只发生在发行版上。有没有人知道这意味着什么,以及如何解决这个问题?

更新:

这实际上与Xcode 8无关,用Xcode 7.3.1构建相同的代码会产生相同的结果。在El Capitan上运行良好的一些应用程序似乎不会运行在Sierra上,并且由于上面的错误而失败。

更新2:有关二进制文件中符号表的详细信息:

代码语言:javascript
复制
Load command 5
     cmd LC_SYMTAB
 cmdsize 24
  symoff 0
   nsyms 0
  stroff 12760
 strsize 8
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-19 21:43:02

结果发现这是由Qt引起的。Qt 5.7.0在libs上执行install任务时不带参数地调用install。对于macOS Sierra,这将导致一个带有空符号的dylib

这个错误将在Qt 5.7.1中修复。同时,只需确保为动态库调用带有strip-S -x

票数 5
EN

Stack Overflow用户

发布于 2016-09-09 13:47:07

我看到了一个类似的错误,我刚刚在我的案例中发现了这一点。我希望我的发现也能帮到你。

因此,基本上,据我所知,当二进制文件中有一个空符号表时(可能还有其他情况),就会发生这种情况。您可以通过运行objdump -private-headers <library>来检查这个

代码语言:javascript
复制
<...>
Load command 4
     cmd LC_SYMTAB
 cmdsize 24
  symoff 0
   nsyms 0        <-- no symbols, oops
  stroff 4104
 strsize 8
<...>

Linker认为,如果符号表是空的(nsyms 0),那么可以说表在文件中的偏移量为零(symoff 0)。因此,严格地说,它声称表从二进制的开头开始。

显然,新版本的10.12 dyld执行以前版本没有执行的检查:它确保符号表完全在__LINKEDIT段中。在我们的例子中,符号表显然违反了这个约束,dyld并不关心它是空的。

我认为这是苹果的缺陷:他们的链接器会创建格式错误的二进制文件,甚至不会发出警告。如果我是Apple,我将修改dyld中的条件,如果符号表为空,则忽略符号表约束。

我只能看到一个解决办法:向您的再导出库添加一个虚拟符号。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39381754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档