Xcode Derleme Ayarlarında "Mimariler" ve "Geçerli Mimariler" arasındaki fark nedir?


112

Bunların anlamı nedir ve onları farklı değerlere ayarlayabilir miyim?

Yanıtlar:


113

Mimariler, inşa etmek istediğiniz mimarilerdir, geçerli mimariler, kod tabanınızla inşa etmeyi düşündüğünüz mimarilerdir.

Yani belki sadece armv7s için ikilinizi oluşturmak istiyorsunuz, ancak aynı kaynak kodu armv7 ve armv6 için iyi derleyecektir. Öyleyse VALID_ARCHS = armv6 armv7 armv7s, ayarladınız ARCHS = armv7sçünkü aslında kodunuzla oluşturmak istediğiniz tek şey bu .

Veya Apple-ese'de:

ARCHS (Mimariler)

Boşluklarla ayrılmış tanımlayıcı listesi. İkilinin hedeflendiği mimarileri (ABI'ler, işlemci modelleri) belirtir. Bu yapı ayarı birden fazla mimariyi belirttiğinde, oluşturulan ikili, belirtilen mimarilerin her biri için nesne kodu içerebilir.

ve:

VALID_ARCHS (Geçerli Mimariler)

Boşluklarla ayrılmış tanımlayıcı listesi. İkilinin oluşturulabileceği mimarileri belirtir. Derleme sırasında bu liste ARCHS derleme ayarının değeriyle kesişir; ortaya çıkan liste, ikilinin üzerinde çalışabileceği mimarileri belirtir. Ortaya çıkan mimari listesi boşsa, hedef ikili oluşturmaz.

Kaynak: Xcode Derleme Ayar Referansı

Pratikte, VALID_ARCHSyalnız kalırsınız ve onu değiştirmek konusunda endişelenmezsiniz ve sadece ARCHSinşa etmek istediğiniz mimarileri ayarlamak için oynarsınız. Tipik olarak, bir Hata Ayıklama derlemesini sadece olarak ayarlarsınız NATIVE_ARCH, çünkü yalnızca test edeceğiniz / üzerinde çalıştıracağınız makine için hata ayıklama sürümünü oluşturmak istediğinizden ve desteklemeyi planladığınız mimarilerin tüm yelpazesi için Sürüm yapıları oluşturur.


1
@DanMoore "Ortaya çıkan mimari listesi" derleme sırasında bellekte yapılır.
Saltymule

3
@ onmyway133 Çoğu zaman VALID_ARCHS istemezsiniz. Yalnızca belirli mimariler için satır içi asm yazıyorsanız, kodunuzun artık bu mimariler dışında herhangi bir mimariye yönelik olmadığını yansıtmak için VALID_ARCHS değerini değiştirebilirsiniz. Çoğunlukla, yine de, Xcode'dan size hangi mimariler için inşa edebileceğini gösteren bir ipucu ve oradan ARCHS'niz için seçim yapıyorsunuz.
Jeremy W. Sherman

4

Apple belgesinden, ikili Xcode'un oluşturacağı listenin Valid Architectures kesişen liste olduğunu biliyoruz Architectures.

Bu yüzden, dediği gibi Jeremy'nin cevabının doğru olduğunu sanmıyorum:

Yani belki sadece armv7s için ikilinizi oluşturmak istiyorsunuz, ancak aynı kaynak kodu
armv7 ve armv6 için iyi derleyecektir. Öyleyse VALID_ARCHS = armv6 armv7 armv7s, ARCHS = armv7s ayarladınız çünkü aslında kodunuzla oluşturmak istediğiniz tek şey bu.

Ayarladığınızda VALID_ARCHS = armv6 armv7 armv7sve ayarladığınızda ARCHS = armv7s, ikili Xcode'un oluşturacağı sonuç armv7s olur - armv6 / armv7 ile uyumlu olamaz.

Ve armv6 / armv7 / armv7s ile uyumlu olmak istiyorsanız , ayarlamalısınız VALID_ARCHS = armv6 armv7 armv7sve ARCHS = armv6bu şekilde, ikili Xcode oluşturacak sonucu armv6 olur ve arm işlemcisi geriye dönük olarak uyumlu olduğu için hem armv6 / armv7 / armv7s üzerinde sorunsuz çalışabilir. .


1
O haklıydı: "çünkü aslında kodunuzla oluşturmak istediğiniz tek şey bu ."
Laszlo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.