OSX10.9 应用崩溃:未找到符号:___strlcat_chk
我有一个应用程序,在我的MacBook(Mavericks系统)上运行得很好。
但是当我在一个虚拟机上(OSX Lion系统)尝试它时,程序崩溃了,并出现了这个错误信息:
Mac-OS-X-Lion AppleFileServer[219]: _Assert: /SourceCache/afpserver/afpserver-585.2/afpserver/AFPRequest.cpp, 1502 (-5000)
--- last message repeated 2 times ---
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: Traceback (most recent call last):
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: File "main.py", line 13, in <module>
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: import SafeDriveController
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: File "/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/SafeDriveController.py", line 17, in <module>
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: from safedrive.sftp import sftp_server
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: File "/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/safedrive/sftp/sftp_server.py", line 14, in <module>
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: from safedrive.sftp.gpg_crypter import GpgCrypter
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: File "/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/safedrive/sftp/gpg_crypter.py", line 3, in <module>
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: import gnupg
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: File "/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/gnupg/__init__.py", line 23, in <module>
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: from . import gnupg
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: File "/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/gnupg/gnupg.py", line 46, in <module>
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: from . import _parsers
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: File "/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/gnupg/_parsers.py", line 34, in <module>
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: from . import _util
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: File "/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/gnupg/_util.py", line 32, in <module>
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: import psutil
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: File "/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/psutil/__init__.py", line 148, in <module>
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: import psutil._psosx as _psplatform
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: File "/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/psutil/_psosx.py", line 17, in <module>
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: import _psutil_osx as cext
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: ImportError: dlopen(/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/_psutil_osx.so, 2): Symbol not found: ___strlcat_chk
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: Referenced from: /Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/_psutil_osx.so
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: Expected in: /usr/lib/libSystem.B.dylib
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: in /Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/_psutil_osx.so
Mac-OS-X-Lion SafeDrive[304]: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '/Users/FrancoisB/EFounders/efounders.safedrive/SafeDrive/main.m:79 main() PyRun_SimpleFile failed with file '/Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/main.py'. See console for errors.'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff8ea72fc6 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff91d28d5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff8ea72dfa +[NSException raise:format:arguments:] + 106
3 CoreFoundation 0x00007fff8ea72d84 +[NSException raise:format:] + 116
4 SafeDrive 0x000000010000164e main + 1486
5 SafeDrive 0x0000000100001074 start + 52
)
Mac-OS-X-Lion [0x0-0x22022].Affinitic.SafeDrive[304]: terminate called throwing an exception
Mac-OS-X-Lion ReportCrash[306]: Attempting to read data: Called memoryAtAddress: 0x1042b650d, which is in an unmappable portion of [0x0 -> 0xffffffffffffffff] in PID# 304.
你有什么办法可以解决这个问题吗?
1 个回答
3
你的问题的答案就在这里:
_psutil_osx.so(来自 /Users/user/Public/Drop Box/SafeDrive.app/Contents/Resources/)
缺少了一个叫做 strlcat_chk 的符号,它在运行时试图从 libSystem.B 导入。这个 _Chk 版本是 strlcat(一个字符串连接函数)的安全版本,它会检查参数是否会导致缓冲区溢出。用某个版本的 XCode 及以后的版本构建的应用程序默认会使用这个函数,而不是 strlcat。这个函数是 Mavericks 系统中 LibC 的一部分,我记得是版本 997。
如果你有这个共享对象的源代码,可以把 _chk 改成不检查的版本(也就是 strlcat),这样应该就能解决问题。否则,你可以尝试修补二进制文件的字符串表(前提是这不会违反代码签名,如果有的话)。你还可以用 -mmin-osx-version 10.7(甚至 10.6)重新编译,这样可能也能解决这个问题。