0

我有一个在 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)

但我不知道它们是否相关。

任何人都可以帮助破译可能是什么问题?

谢谢!

4

1 回答 1

0

固定的。事实证明,必须明确链接框架。不知何故,依赖关系在链接时得到解决,但在运行时失败。

于 2013-01-20T01:33:16.737 回答