Ubuntu / Fedora / Red Hat / Suse kullandım ancak OS X'i hiç kullanmadım. Düzenli olarak OS X'i kullanmaya başlamam gerekirse, dikkat etmem gerekenler nelerdir?
Kullandığım araçlar GNU takım zinciri, C ++ / Boost, vb.
Ubuntu / Fedora / Red Hat / Suse kullandım ancak OS X'i hiç kullanmadım. Düzenli olarak OS X'i kullanmaya başlamam gerekirse, dikkat etmem gerekenler nelerdir?
Kullandığım araçlar GNU takım zinciri, C ++ / Boost, vb.
Yanıtlar:
Aynı hareketi yıllar önce yaptım. İşte karşılaştığım şeyler:
Ortalama masaüstü Linux’unuz OS X’inkinden daha zengin bir kullanıcı alanına sahiptir.
Muhtemelen benden farklı araçları özleyeceksin, bu yüzden değişiklik önerileri konusunda kesinleşmenin bir anlamı yok.
Bunun yerine, ilk önce Fink , MacPorts veya Homebrew'i yükleyin . Bu sistemler Linux veya BSD'lere özgü bir paket yönetim sistemi sağlar. Her birinin kendine özgü lezzeti ve paket seti vardır, bu yüzden doğru seçim zevkinize ve ihtiyaçlarınıza göre olacaktır.
İhtiyacınız olan her programın tek bir paket sistemde bulunmayacağını görebilirsiniz. Bazı programlar henüz OS X'e taşınmamıştır, bu nedenle herhangi bir paket sisteminde görünmezler . Bununla birlikte, bu sistemler OS X ile gelenleri büyük ölçüde genişletmektedir ve Linux'tan geçişinizi kolaylaştıracaktır.
OS X komut satırı derleyicileri artık varsayılan olarak 64 bitlik yürütülebilir dosyalar oluşturuyor.
Leopard ve önceki sürümlerde, derleyiciler varsayılan olarak 32 bitlik yürütülebilir dosyalar oluşturdular. Bu, çeşitli şekillerde sorunlara neden olabilir: belki yeniden oluşturamayacağınız eski 32-bit kütüphaneleriniz var ancak bunlarla bağlantı kurmalısınız, belki de sisteminizi 32-bit modunda çalıştırıyorsunuz, vb.
32 bitlik bir derlemeyi zorlamanın bir yolu gcc
, derleme sistemlerinde varsayılan olarak gcc-4.0
eski 32-bit Leopard derleyicisi olan derlemelerin geçersiz kılınmasıdır . ( Snow Leopard'da gcc
varsayılan gcc-4.2
olarak 64 bitlik bir bağlantıdır .) Autoconf tabanlı derleme sistemleriyle bu çalışır:
$ ./configure CC=gcc-4.0 CXX=g++-4.0
(Yalnızca CXX
program C ++ bileşenleri içeriyorsa , bit'e ihtiyacınız vardır .)
-m32
Derleyici ve bağlayıcıya geçmenin bir başka yolu :
$ ./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
Daha çok yazıyor, ancak yeni GCC'den 32 bit sürüm almanıza izin veriyor.
Dinamik bağlantı çok farklıdır.
ld
Elindeki komutları elle yazma sırasın buysa , bu alışkanlığı kırmanın zamanı geldi. Bunun yerine programları ve kitaplıkları derleyici üzerinden bağlamanız veya benzeri bir aracı kullanmanız gerekir libtool
. Bunlar, platforma özgü bağlantı şeması farklılıklarına dikkat eder, böylece taşınabilir mekanizmalarla soyutlayamayacağınız öğrenme programları için beyin gücünü koruyabilirsiniz.
Örneğin, kas hafızanızı güncellemeniz gerekir, böylece hangi kitaplıkların bağlantılı olduğunu bulmak otool -L someprogram
yerine yazabilirsiniz .ldd someprogram
someprogram
Beyninizi ilk önce bükecek olan dinamik bağlantıdaki diğer bir fark, OS X'te bir kütüphanenin kurulum yerinin kütüphanenin kendisine kaydedilmiş olmasıdır ve linker, bunu link zamanında çalıştırılabilir dosyaya kopyalar. Bunun anlamı, kurulu olan bir kütüphaneye bağlanırsanız /usr/local/lib
ancak onu çalıştırılabilir dosyayla aynı dizinde kullanıcılarınıza göndermek istiyorsanız, kurulum işleminizin bir parçası olarak böyle bir şey söylemeniz gerekir:
$ cp /usr/local/lib/libfoo.dylib .
$ install_name_tool -id @loader_path/libfoo.dylib libfoo.dylib
$ make LDFLAGS=-L. relink
Şimdi, yukarıdakilerin çoğunun derleme sisteminize göre değişmesi muhtemeldir, bu nedenle sadece bir tarif yerine örnek olarak alın. Bunun yaptığı, bağlantı kurduğumuz bir kütüphanenin özel bir kopyasını çıkarması, paylaşılan kütüphane tanımlayıcısını mutlak bir yoldan "çalıştırılabilir ile aynı dizinde" anlamına gelen göreceli bir kimliğe dönüştürmesi, daha sonra bu değiştirilmiş kopyaya karşı yürütülebilir dosyayı yeniden oluşturmaya zorlamasıdır. Kütüphanenin
install_name_tool
Burada çekirdek komuttur. Bunun yerine kütüphaneyi ../lib
yürütülebilir dosyaya göre bir dizine kurmak isteseydiniz, bunun yerine -id
argüman olması gerekirdi @loader_path/../lib/libfoo.dylib
.
Dinamik bağlantı + üçüncü taraf paketleri erken başlarda baş ağrısına neden olabilir.
Kütüphaneleri standart konumlara yüklemeyen üçüncü taraf paketlerinden kütüphaneleri kullanmaya başlar başlamaz, dinamik bağlantı sorunları yaşamaya başlayabilirsiniz. MacPorts bunu yapar, örneğin kütüphaneleri içine veya /opt/local/lib
yerine kütüphaneler kurar . Bununla karşılaştığınızda, sorun için iyi bir düzeltme aşağıdaki gibi satırları eklemek içindir :/usr/lib
/usr/local/lib
.bash_profile
# Tell the dynamic linker (dyld) where to find MacPorts package libs
export DYLD_LIBRARY_PATH=/opt/local/lib:$DYLD_LIBRARY_PATH
# Add MacPorts header file install dirs to your gcc and g++ include paths
export C_INCLUDE_PATH=/opt/local/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/opt/local/include:$CPLUS_INCLUDE_PATH
OS X, CPU uyumluluğu sorununu Linux'tan farklı şekilde ele alır.
Her ne sebeple olursa olsun 32-bit'i desteklemeniz gereken 64-bit bir Linux'ta, her iki formatta olması gereken kütüphaneler gibi iki kopyasını, 64-bit sürümleri lib64
paralel bir dizinde geleneksel lib
dizin
OS X, birden fazla ikili dosyayı tek bir dosyaya koymanıza izin veren Evrensel ikili kavramıyla bu sorunu farklı şekilde çözer. Şu anda en fazla 4 CPU türünü destekleyen çalıştırılabilir dosyalara sahip olabilirsiniz: 32 ve 64 bit PowerPC, artı 32 ve 64 bit Intel.
Xcode ile Universal ikili dosyaları oluşturmak kolaydır, ancak komut satırı araçları ile biraz acı çektirir. Bu size Autoconf tabanlı derleme sistemleriyle birlikte yalnızca Evrensel bir Intel derlemesi kazandırır:
$ ./configure --disable-dependency-tracking CFLAGS='-arch i386 -arch x86_64' \
LDFLAGS='-arch i386 -arch x86_64'
Ekle -arch ppc -arch ppc64
için CFLAGS
ve LDFLAGS
size PowerPC desteği gerekiyorsa.
Bağımlılık izlemesini devre dışı bırakmazsanız, yalnızca bir platform için yapı oluşturmaya başlayacaksınız çünkü .o
ilk platform için yeni oluşturulan dosyaların varlığı make(1)
, ikinci platform için de oluşturulmasına gerek olmadığına ikna eder. Yukarıdaki örnekte her şeyin iki kez inşa edilmesi gerekiyor; hala PowerPC desteğine ihtiyacınız varsa, tamamen Evrensel bir ikili dosya için dört kez.
( Apple Technical Note TN2137'de daha fazla bilgi bulabilirsiniz .)
Geliştirici araçları varsayılan olarak OS X'te yüklü değildir.
Lion'dan önce, sisteminiz için doğru araçları geliştirmek için en güvenilir yer işletim sistemi diskleriydi. İsteğe bağlı bir kurulum.
Dev aletlerinin işletim sistemi disklerinden yüklenmesiyle ilgili güzel bir şey, aletlerin işletim sistemi ile çalışacağını bilmenizdir. Apple, Apple olmak üzere, en son derleyicileri çalıştırmak için işletim sisteminin yeni bir sürümüne sahip olmak zorundasınız ve her zaman eski araçların indirilmesini sağlamamışlardır, bu yüzden işletim sistemi diskleri genellikle belirli bir araç için doğru araçları bulmak için en kolay yoldur. dev veya test kutusu.
Lion ile, yükleme medyasını kaldırmaya çalışıyorlar, bu yüzden pahalı USB anahtar sürümünü satın almadıkça Xcode'u App Store'dan indirmeniz gerekecek .
İndirdiğiniz tüm Xcode DMG'lerin en az birkaç versiyonunu saklamanızı öneririm. Lion'un halefi bir ya da üç yıl sonra çıktığında, kendinizi Lion test VM'sine çağdaş bir Xcode sürümü kurmanın bir yolunu bulamayabilirsiniz. Kullanılabilirlik sorunları ve işletim sistemi ortamının olmaması, Xcode'un eski sürümlerini yoksa elde edilemez hale getirmesi durumunda önceden planlayın.
dyld
İnstall_name ve OSX dinamik bağlantı düzenleyicisinin sevinci, bağımlılıkları giderir!
BÜYÜK GOTCHA - Mac OS dosya sistemi büyük / küçük harfe duyarlı değildir.
Her ne kadar Fink ve MacPorts, OS X'te unix paketlerini elde etmenin geleneksel yolu olsa da, benim brew
için daha iyi çalışan ve sistemimle daha az karışık olan ve kullanımı daha kolay olan yeni bir araç bulmanızı tavsiye ederim . Temel olarak sadece tarball'ları indirir ve / usr / local dizinine kurulur, ancak tüm süreci çok güzel bir şekilde otomatikleştirir.
BÜYÜK GOTCHA - Mac OS dosya sistemi büyük / küçük harfe duyarlı değildir.
Mac OS X'te normal bir sabit sürücü birimi olarak takılabilen büyük / küçük harf duyarlı bir disk görüntüsü oluşturabilirsiniz.
# cf. http://codesnippets.joyent.com/posts/show/8617
IMAGE="${HOME}/Desktop/Case Sensitive Test.dmg"
VOLNAME="Case Sensitive Test"
hdiutil create "${IMAGE}" -size 10m -fs HFSX -volname "${VOLNAME}" -layout NONE
hdiutil attach "${IMAGE}"
cd "/Volumes/${VOLNAME}"
touch foo.txt Foo.txt
open .
ls -l [Ff]oo.txt
stat -f "inode: %i -- name: %N" [Ff]oo.txt
cd ~
hdiutil detach "/Volumes/${VOLNAME}"
İşte seçilmiş dev makalelerin iyi bir kaynağı, Kakao Edebiyat Listesi:
http://osx.hyperjeff.net/Reference/CocoaArticles
(Bu, özellikle bir gün Mac OS X'e özgü güzelliklerden yararlanmak istiyorsanız faydalı olabilir.)
Solaris, BSD, Linux ve Windows’tan bir ağ yığınını OSX’e aktarırken, dikkat çeken tek ana nokta FreeBSD’ye benzeyen tüm takım zinciri oldukça eski.
Apple OSX Lion ile hızlanıyor ama Leopard, Snow Leopard modern Linux dağıtımlarının oldukça gerisinde ve pek çok standart desteklenmiyor. Benim durumumda, RFC 3678 (Çok Noktaya Yayın Kaynak Filtreleri için Soket Arabirimi Uzantıları) eksikliği oldukça rahatsız edicidir.
OSX sunucusunda, HTTP sunumu için önerildiği şekilde büyük küçük harf duyarlı bir dosya sistemi kurdum.
/proc
dosya sistemi./dev/rtc
, /dev/hpet
ve RDTSC
anlaşılmış görünüyor. OSX yerel alternatifler sunar.epoll
, ama sen poll
kazandın