我有一个在 OS/X Lion 上运行的 c++ 应用程序,它在调用 glIsBuffer(0) 时崩溃。XCode 4.5 堆栈跟踪状态:
错误:地址不包含指向目标文件中某个部分的部分
和 DYLD_PRINT_APIS 显示:
dlopen(/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/CoreGraphics, 0x00000009)
...
dlsym(0x7f9288d00cd0, gliCopyAttributes)
dlsym(0x7f9288d00cd0, gliGetVersion)
dlsym(0x7f9298d70620, __CGBitmapContextDelegateCreate)
dlsym(0xffffffffffffffff, CGSCopyCoreGraphicsCapabilities)
Segmentation fault: 11
最后一次调用 dlsym() 似乎传递了一个相当奇怪的库句柄。我查看了 dlopen 的返回值,但它应该在错误时返回 NULL。日志中没有报告 dlopen 调用的错误。
CGSCopyCoreGraphicsCapabilities 是一个核心图形调用,尽管谷歌没有在它上面出现任何文档。我目前的假设是 dlsym 使用了无效的库句柄。可能未加载或已卸载正确的核心图形库。
运行 otool 显示一些版本不匹配:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
但我不知道它们是否相关。
任何人都可以帮助破译可能是什么问题?
谢谢!