问题
I recently just upgraded to the new XCode. After I upgraded, some of my apps won't build. I get this error:
ld: cannot link directly with /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/system/libcommonCrypto.dylib. Link against the umbrella framework 'System.framework' instead. for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I've tried everything - cleaning, reimporting, changing architectures...
Please help
回答1:
I resolved this issue in a diffent way after I tried both the above where neither worked for me.
The problem was that when I was adding the library from the main interface (main build-settings...etc) I was searching initially for crypto
and then two libs comes back libcorecrypto.dylib
and liblibcommonCrypto.dylib
, if you notice, both exists in gray-color unlike the usually yello-colored libs that you normally add. Adding these causes the compiler to report back (some other libs are missing, such as the libz, or another lib that will be needed the more functions you take on.
If you notice the above two libs would normally sit under JavaScriptCore.framework
library (which is the yellow one), therefore, by removing the above two and adding JavaScriptCore.framework
instead, the problem was resolved, and build successful
showed
Also to mention that based on the gray-libs existing as a bundle inside JavaScriptCore.framework
, the libcrypto and the other one will not exists under the /Library/.../system/path
as mentioned above, i.e. you didn't delete them from your system, they're just not there.
Again, the solution is:
*From your main XCODE project settings, don't add:*dd
libcorecrypto.dylib
liblibcommonCrypto.dylib
Instead, add:
JavaScriptCore.framework
In your .m (code), just source them normally by doing:
#include <CommonCrypto/CommonDigest.h> (or any of your other libs as needed in code)...
It should work fine.
I hope this helps.
Kind Regards
回答2:
I just solved this as follows:
It turns out that the libcommonCrypto.dylib error was a red herring.
After removing libcommonCrypto.dylib as suggested above, I got 9 new errors. At first glance, I assumed they were Crypto errors, but in fact they were not; for me, it actually traced back to zLib not being included, which was "imported" in a deeper part of the overall implementation (of which crypto is a part).
For me specifically, it traced back to ASIDataDecompressor.h, #import < zlib.h>
I fixed it by including the missing libz.dylib framework; ultimately, I did not have to explicitly include libcommonCrypto.dylib.
So, be sure to check the errors closely after toggling libcommonCrypto, and make sure some OTHER libraries are not missing, instead.
回答3:
I'm using cocoapods for library management. One of the libraries (you can simple search in your workspace) contained reference to CommonCrypto.framework which was red in the list of frameworks in its project settings.
In my case I had to remove the dependency on CommonCrypto.framework, but this solution lasts just to another update of your pods.
Btw I'd like to know a command to list the graph of dependencies among the libraries in the Podfile.
回答4:
I had the same error,
ld: in '/usr/lib/system/libcommonCrypto.dylib', missing required architecture arm64 in file /usr/lib/system/libcommonCrypto.dylib (2 slices) for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I solved this problem by checking my $PATH. It was a missing file.
Using find / -type f -name libcommonCrypto.dylib
Comparing my libs with my friends mac systems, it shows that this file was not present on my computer :
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/system/libcommonCrypto.dylib
Xcode using $PATH fallback on /usr/lib/system/libcommonCrypto.dylib
but it's not the good built (i386 insteadof arm stuff).
I copied the version of my friend, move in /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/system/
and then I was able to build my projects again.
There is a vicious problem here cause there is a lot same file for this lib depending of your architecture and most of them are not intended to be used for ios builds. But the $PATH env var will fallback on /usr/lib when no files are found on dedicated dirs.
Xcode fallback on /usr/lib/system/libcommonCrypto.dylib
but this is definitely not the correct lib cause it not a built for ios, but a built for my mac.
回答5:
Better Solution ,as it says remove libcommonCrypto.dylib,and replace by adding SystemConfiguration.framework.It worked for me,might be useful to someone.I was getting Linker Error saying gettingLink against the umbrella framework 'System.framework' instead.
来源:https://stackoverflow.com/questions/12547711/commoncrypto-isnt-building-for-arch-armv7-ios