ChatGPT解决这个技术问题 Extra ChatGPT

File is universal (three slices), but it does not contain a(n) ARMv7-s slice error for static libraries on iOS, anyway to bypass?

I upgraded Xcode version and when using external static libraries, I get this message:

ld: file is universal (3 slices) but does not contain a(n) armv7s slice: /file/location for architecture armv7s clang: error: linker command failed with exit code 1 (use -v to see invocation)

Is there any way to bypass this and add support to the library if the developer of the library hasn't updated their library yet?

This seems to be a good solution for now - galloway.me.uk/2012/09/hacking-up-an-armv7s-library

P
Peter Mortensen

If you want to remove the support for any architecture, for example, ARMv7-s in your case, use menu Project -> Build Settings -> remove the architecture from "valid architectures".

You can use this as a temporary solution until the library has been updated. You have to remove the architecture from your main project, not from the library.

Alternatively, you can set the flag for your debug configuration's "Build Active Architecture Only" to Yes. Leave the release configuration's "Build Active Architecture Only" to No, just so you'll get a reminder before releasing that you ought to upgrade any third-party libraries you're using.


you don't have to recompile the library. you can remove this flag from the project that is using the library.
It will work, since old apps that have not been compiled with armv7s support have to run as well. But you will loose some specific optimizations. This should be a temporary workaround anyway.
Dropbox framework has been updated for this issue see forums.dropbox.com/topic.php?id=90014
Removing armv7s from the Valid Architectures list worked for me, however so did removing it from Architectures. In both cases, however, I would get No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7). from the linker which I could only solve by adding i386 to the Valid Architectures list.
No, armv7s is the instruction set of the A6 processor that is being used in the iPhone 5. Since the A6 is backwards compatible, it will still run the armv7 instruction set.
P
Peter Mortensen

I've simply toggled "Build Active Architecture Only" to "Yes" in the target's build settings, and it's OK now!


@Blasco73 Do you even know that you are awesome? You should. Here goes, You sir, are awesome!
How can this be a good solution. It removes the error, but you only get build for the current arch, not all on the market...
A
Arthur Jen

Try to remove armv7s from project's "Valid architecture" to release from this issue for iOS 5.1 phone


C
Community

I just posted a fix here that would also apply in this case - basically, you do a hex find-and-replace in your external library to make it think that it's ARMv7s code. You should be able to use lipo to break it into 3 static libraries, duplicate / modify the ARMv7 one, then use lipo again to assemble a new library for all 4 architectures.


R
RAZ

Flurry Support for iPhone 5 (ARMv7s) As I mentioned in yesterday’s post, Flurry started working on a version of the iOS SDK to support the ARMv7s processor in the new iPhone 5 immediately after the announcement on Wednesday.

I am happy to tell you that the work is done and the SDK is now available on the site.


P
Panky

use menu Project -> Build Settings ->

then remove armv7s from the"valid architectures". If standard has been chosen then delete that and then add armv7.


R
Raphael Ayres

In case this happens to someone. I built my own library to use with a third party code. While I was building it to deliver, I accidentally left my iPhone 4S plugged in, and so Xcode built my library only for the plugged architecture instead of following the project settings. Remove any plugged in devices and rebuilt the library, link it, and you should be all right.

Hope it helps.


J
Jay Imerman

In my case, I was linking to a third-party library that was a bit old (developed for iOS 6, on XCode 5 / iOS 7). Therefore, I had to update the third-party library, do a Clean and Build, and it now builds successfully.