我在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使用了无效的库句柄。可能没有加载或卸载了正确的Core Graphics库。
运行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)
但我不知道它们是否相关。
任何人都可以帮忙解读可能存在的问题吗?
谢谢!
答案 0 :(得分:0)
固定。事实证明,框架必须明确地链接在一起。不知何故,依赖关系在链接时得到解决但在运行时失败。