Mac OS X动态链接器(dyld
)具有用于此目的的功能:DYLD_IMAGE_SUFFIX
。它将允许您动态加载您链接到的任何框架或共享库的调试版本。那么你不需要一个完全独立的.framework
包;只需创建另一个名为MyLibrary_debug
的共享库。例如,在的CoreFoundation虎包括调试和分析变异(看起来像他们还没有收到安全更新,但无论如何):
% ls -l /System/Library/Frameworks/CoreFoundation.framework/Versions/A/
total 20080
-rwxr-xr-x 1 root wheel 1M Sep 10 17:55 CoreFoundation*
-rwxr-xr-x 1 root wheel 6M Apr 24 2007 CoreFoundation_debug*
-rwxr-xr-x 1 root wheel 2M Apr 24 2007 CoreFoundation_profile*
利用以上苹果的框架,标准的“调试”后缀是_debug
。 (Xcode中的可执行文件上的常规窗格中的“在加载框架时使用[debug]后缀”设置为DYLD_IMAGE_SUFFIX=_debug
)。
你可能会想到用_debug
以及是一个好主意,但我建议你不这样做,因为苹果已经打破了多次(someexamples)的_debug
版本的框架。截至Leopard只有libSystem
,libmx
和libmathCommon
带有调试变种,但在雪豹他们再次爆发(我自己跑到this problem)。
如果你为你的调试库选择了一个不同的后缀,你不应该触发苹果的bug,并且仍然能够在正常和调试变体之间共享你的框架的其余部分(头文件,资源等)。