我有一个启用ARC的应用程序,它通过dlopen
动态加载dylib。 dylib也支持ARC。两者都使用MacOSX SDK 10.7进行编译,部署目标为10.6。
在dlopen
,我得到:
Symbol not found: _objc_retainAutoreleaseReturnValue
Referenced from: /Users/bea/Downloads/MusicPlayer.app/Contents/Resources/Python/_guiCocoaCommon.dylib
Expected in: /usr/lib/libobjc.A.dylib
这是正确的,因为_objc_retainAutoreleaseReturnValue
不在MacOSX 10.6的/usr/lib/libobjc.A.dylib
中。但它在哪里?
我该如何解决这个问题?
答案 0 :(得分:1)
我使用的dlopen
是RTLD_NOW
标志。 (我在Python中通过ctypes.CDLL
/ ctypes._dlopen
使用它,RTLD_NOW
被强制使用。)
我猜你必须在MacOSX上使用RTLD_LAZY
因此。当我使用RTLD_LAZY
时,一切正常(到目前为止)。 看起来好像实际上没有使用符号 编辑:我认为这个解释是错误的。我查看了反汇编,它在我的一个方法中使用。但我想它在运行时被现有的_objc_retainAutoreleaseReturnValue
。所以我想知道它为什么会存在。也许这是Apples编译器中的一个错误。___arclite_objc_retainAutoreleaseReturnValue
取代,也在Dylib中(因此我猜libarclite_macosx.a总是自动静态链接到它)。