我有一个支持ARC的应用程序,可通过来动态加载dylib dlopen
。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
不在/usr/lib/libobjc.A.dylib
MacOSX 10.6中。但是在哪呢?
我该如何解决?
在dlopen
使用我与RTLD_NOW
标志。(我在Python中通过ctypes.CDLL
/使用了它,ctypes._dlopen
并将RTLD_NOW
其强制执行。)
我猜您因此必须RTLD_LAZY
在MacOSX上使用。当我使用时RTLD_LAZY
,一切正常(到目前为止)。看起来好像 编辑:我认为这个解释是错误的。我查看了反汇编,并将其用于我的一种方法中。但是我想它会_objc_retainAutoreleaseReturnValue
实际上没有使用该符号。所以我想知道为什么它在那里。也许这是Apple编译器中的错误。___arclite_objc_retainAutoreleaseReturnValue
在运行时被Dylib中的现有文件替换(所以我想libarclite_macosx.a总是自动静态链接到它)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句