【问题标题】:Xcode warnings: could not open OSO fileXcode 警告:无法打开 OSO 文件
【发布时间】:2011-10-27 23:19:36
【问题描述】:

我将我的 Xcode 项目中的 ffmpeg dylib 升级到了新版本,现在当我运行我的应用程序时,我在 Xcode 控制台窗口中收到所有这些警告。知道为什么我会得到这些吗?

提前致谢!

这是一个缩写版本,但你会明白的。

warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/4xm.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/4xm.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/8bps.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/8bps.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/8svx.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/8svx.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/a64multienc.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/a64multienc.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aac_ac3_parser.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aac_ac3_parser.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aac_adtstoasc_bsf.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aac_adtstoasc_bsf.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aac_parser.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aac_parser.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacadtsdec.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacadtsdec.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aaccoder.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aaccoder.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacdec.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacdec.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacenc.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacenc.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacps.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacps.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacpsy.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacpsy.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacsbr.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aacsbr.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aactab.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aactab.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aandcttab.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aandcttab.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aasc.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/aasc.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3_parser.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3_parser.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3dec.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3dec.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3dec_data.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3dec_data.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3dsp.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3dsp.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3enc.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3enc.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3enc_combined.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3enc_combined.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3enc_fixed.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3enc_fixed.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3enc_float.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3enc_float.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3tab.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/ac3tab.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/acelp_filters.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/acelp_filters.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib
warning: .o file "/Users/username/Downloads/ffmpeg-0.8.5/libavcodec/acelp_pitch_delay.o" more recent than executable timestamp in "/Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib"
warning: Could not open OSO file /Users/username/Downloads/ffmpeg-0.8.5/libavcodec/acelp_pitch_delay.o to scan for pubtypes for objfile /Users/username/Library/Developer/Xcode/DerivedData/MyApp-cjpuovfvlxckuddiuysbbosqgbsj/Build/Products/Debug/MyProject.framework/Versions/A/Libraries/libavcodec.dylib

【问题讨论】:

  • 看来我只有在 ffmpeg 源上运行 make clean 后才能得到这个

标签: objective-c xcode ffmpeg gdb dwarf


【解决方案1】:

如何中和“无法打开 OSO”并强制加载“o”:


免责声明:您不应该这样做 :)


As explained previously,错误消息告诉您,您的调试信息是您的 dylib 的不正确信息。

但是,如果出于某种特殊原因,您认为您的“o”文件(尽管它们可能带有错误的时间戳)确实包含正确的信息并且您需要将它们加载到 gdb 中,然后继续...

对于下面的示例代码,我假设一个名为 abcdefg.o 的 o 文件和一个名为 lib_jklmnop.dylib 的 dylib


第一步。运行以下命令:

nm -ap lib_jklmnop.dylib  | grep OSO | awk '{printf("%s %s\n", toupper($1), $0 )}'

输出应包含:

00000000560D902C 00000000560d902c - 03 0001   OSO /some/file/path/abcdefg.o

注意:您必须找到包含“abcdefg.o”的输出行。我们只修复了一个文件的 OSO 警告:abcdefg.o,因此如果您不使用与该文件对应的时间戳,那么以下步骤将毫无意义。

第二步。取第一列的十六进制数(本例中为 560D902C),并通过 python 运行,如下所示:

echo import datetime\; t=datetime.datetime.fromtimestamp\( 0x560D902C \) \; print \( t.strftime\(\'%Y%m%d%H%M.%S\'\) \) | python3

(您可以在此步骤中使用 perl 或其他东西。出于演示目的,Python 似乎易于访问和移植。)上面将采用“0x560D902C”并生成格式化的时间戳:201510011257.32

第三步。使用从第 2 步获得的格式化时间戳,运行 touch 命令更改 abcdefg.o 上的时间戳:

touch -t 201510011257.32  abcdefg.o

现在“o”上的时间戳与 dylib 中的 OSO 条目匹配。 GDB 会加载这个“o”文件。

(供后代使用:在 Mac OS X 10.8.5 上使用 GNU gdb 6.3.50-20050815 Apple 版本 gdb-1824 进行测试)

推荐阅读:

Apple DWARF debug scheme

Bugzilla@Mozilla - GDB complains of .o files having newer timestamp than executable

【讨论】:

    【解决方案2】:

    当我看到这个时,我经常发现 clean 和 rebuild 会修复警告。

    【讨论】:

      【解决方案3】:

      我已经在 gdb 中容忍这个“无法打开 OSO 文件”输出好几个星期了。随意的谷歌搜索总是让我回到这里。

      @kakyo 的回答(尝试重建)有效,但我想了解更多。

      基本(众所周知?)背景信息:“o”文件和“dylib”文件都是在构建过程中生成的。 “o”文件包含调试信息。但是,当链接器链接“o”文件以创建“dylib”时,该调试信息不会放入生成的 dylib。

      警告表明“o”文件上的时间戳比“dylib”上的时间戳更新。实际上——而且这种区别很关键——警告将“o”文件的时间与 dylib 中的时间戳进行比较。。您可以使用以下命令查看 dylib 中与 OSO 相关的时间戳:

      bash_prompt$ nm -ap libavcodec.dylib  | grep OSO
      
      00000000560d913f - 03 0001   OSO /Downloads/ffmpeg-0.8.5/libavcodec/4xm.o
      00000000560d913f - 03 0001   OSO /Downloads/ffmpeg-0.8.5/libavcodec/8bps.o
      00000000560d913e - 03 0001   OSO /Downloads/ffmpeg-0.8.5/libavcodec/8svx.o
      00000000560d913e - 03 0001   OSO /Downloads/ffmpeg-0.8.5/libavcodec/a64multienc.o
      00000000560d9140 - 03 0001   OSO /Downloads/ffmpeg-0.8.5/libavcodec/aac_parser.o
      00000000560d9141 - 03 0001   OSO /Downloads/ffmpeg-0.8.5/libavcodec/aaccoder.o
      

      请注意:第一列的十六进制值是时间戳。

      GDB(调试器)在dylib中记录的路径找到o文件,然后GDB检查时间戳。

      这个时间戳检查功能最明显的用例如下:

      1. 您的产品(例如,您公司的“旗舰应用程序”)在您的应用程序包中附带了一些第三方 dylib(如 ffmpeg dylib)。
      2. 您在 GDB 下启动应用程序,您的应用程序会加载第三方 dylib。
      3. 哎呀!您的 app bundle 包含third_party.dylib过期副本。你昨天实际上构建了一个新的third_party.dylib(它产生了一个新的dylib 新的“o”文件)。那些新鲜的第三方项目都在“~/third_party/other_folder”中,你忘了把最新的third_party.dylib复制到你的app bundle中。

      假设third_party.dylib 始终构建在同一个(项目外部)目录中,那么这些时间戳检查是提醒您确切“糟糕!”的一种方式。如上所述。您的 third_party.dylib 的过期副本(您的应用程序包中的副本)具有指向“~/third_party/other_folder/someclass.o”的“OSO”条目,但调试器提醒您“~/third_party/other_folder/someclass.o”最近已重新编译,你似乎没有使用最新编译对应的dylib。

      有趣的琐事:错误提示“比可执行时间戳更近”[重点是我的]——但这并不总是正确的!如果时间戳比 dylib OSO 条目预期的更新旧,则会出现错误。当严格的时间戳相等测试失败时会出现该错误。在此处查看相关的 gdb 源代码:

      https://github.com/unofficial-opensource-apple/gdb/blob/ae8094e0d84d94fc0ad9b5ecdcd79acd722879f8/src/gdb/dbxread.c http://www.opensource.apple.com/source/gdb/gdb-952/src/gdb/dbxread.c

      最后说明:要真正解决“无法打开 OSO”错误,请返回@kakyo's original correct advice

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-26
        • 2016-08-05
        • 1970-01-01
        • 1970-01-01
        • 2012-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多