Saya telah menggunakan Ubuntu / Fedora / Red Hat / Suse tetapi belum pernah menggunakan OS X sama sekali. Jika saya harus mulai menggunakan OS X secara teratur, hal-hal apa yang harus saya perhatikan?
Alat yang saya gunakan adalah rantai alat GNU, C ++ / Boost, dll.
Jawaban:
Saya melakukan langkah yang sama bertahun-tahun lalu. Inilah beberapa hal yang saya alami:
Rata-rata desktop Linux Anda memiliki pengguna yang lebih kaya daripada OS X.
Anda mungkin akan kehilangan alat yang berbeda dari yang saya lakukan, jadi tidak masuk akal untuk mendapatkan rekomendasi tentang penggantian.
Sebaliknya, cukup instal Fink , MacPorts , atau Homebrew hal pertama. Sistem ini menyediakan sistem manajemen paket khas Linux atau BSD. Masing-masing memiliki citarasa dan paket sendiri, sehingga pilihan yang tepat akan didasarkan pada selera dan kebutuhan Anda.
Anda mungkin menemukan bahwa tidak ada satu sistem paket akan memiliki setiap program yang Anda butuhkan. Beberapa program belum porting ke OS X, jadi mereka tidak akan muncul di sistem paket apa pun . Namun demikian, sistem ini sangat memperluas apa yang dikirim dengan OS X, dan akan memudahkan transisi Anda dari Linux.
Kompiler baris perintah OS X sekarang membangun executable 64-bit secara default.
Di Leopard dan sebelumnya, kompiler membuat executable 32-bit sebagai default. Ini dapat menyebabkan masalah dalam beberapa cara: mungkin Anda memiliki perpustakaan 32-bit lama yang tidak dapat Anda bangun kembali tetapi harus terhubung, mungkin Anda masih menjalankan sistem Anda dalam mode 32-bit, dll.
Salah satu cara untuk memaksa build 32-bit adalah dengan mengesampingkan
gcc
default dalam sistem build dengangcc-4.0
, yang menjadi compiler Leopard 32-bit-by-default. (gcc
adalah symlink ke 64-bit-secara-defaultgcc-4.2
pada Snow Leopard.) Dengan sistem build berbasis autoconf, ini berfungsi:(Anda hanya perlu
CXX
bit jika program berisi komponen C ++.)Cara lain adalah dengan meneruskan
-m32
ke kompiler dan tautan:Ini lebih banyak mengetik, tetapi memungkinkan Anda mendapatkan build 32-bit dari GCC yang lebih baru.
Tautan dinamis sangat berbeda.
Jika Anda adalah orang yang menulis
ld
perintah dengan tangan, saatnya untuk menghentikan kebiasaan itu. Anda seharusnya menautkan program dan pustaka melalui kompiler, atau menggunakan perantara sepertilibtool
. Ini menangani perbedaan skema tautan platform-khusus niggly, sehingga Anda dapat menghemat daya otak untuk program pembelajaran yang tidak dapat Anda abaikan dengan mekanisme portabel.Misalnya, Anda harus memperbarui memori otot Anda sehingga Anda mengetik
otool -L someprogram
alih-alihldd someprogram
untuk mencari tahu apa perpustakaansomeprogram
terhubung.Perbedaan lain dalam hubungan dinamis yang akan memelintir otak Anda pada awalnya adalah bahwa pada OS X, lokasi pemasangan untuk perpustakaan dicatat di perpustakaan itu sendiri , dan salinan tautan itu menjadi yang dapat dieksekusi pada waktu tautan. Ini berarti bahwa jika Anda menautkan ke pustaka yang telah diinstal
/usr/local/lib
tetapi Anda ingin mengirimkannya ke pengguna Anda di direktori yang sama dengan yang dapat dieksekusi, Anda perlu mengatakan sesuatu seperti ini sebagai bagian dari proses instalasi Anda:Sekarang, sebagian besar di atas mungkin bervariasi untuk sistem build Anda, jadi anggap saja sebagai contoh, daripada resep. Apa yang dilakukan adalah membuat salinan pribadi dari perpustakaan yang kami tautkan, mengubah pengidentifikasi pustaka bersama dari jalur absolut menjadi relatif yang berarti "dalam direktori yang sama dengan yang dapat dieksekusi", lalu memaksa membangun kembali yang dapat dieksekusi terhadap salinan yang dimodifikasi ini. perpustakaan.
install_name_tool
adalah perintah inti di sini. Jika Anda ingin menginstal pustaka di../lib
direktori relatif terhadap yang dapat dieksekusi,-id
argumennya haruslah@loader_path/../lib/libfoo.dylib
sebaliknya.Joe Di Pol menulis artikel bagus tentang ini , dengan lebih banyak detail.
Tautan dinamis + paket pihak ketiga dapat menyebabkan sakit kepala sejak dini.
Anda cenderung mengalami masalah tautan dinamis sejak awal, segera setelah Anda mulai mencoba menggunakan pustaka dari paket pihak ketiga yang tidak menginstal pustaka ke lokasi standar. MacPorts melakukan ini, misalnya, menginstal pustaka
/opt/local/lib
, bukan/usr/lib
atau/usr/local/lib
. Saat Anda mengalami ini, perbaikan yang baik untuk masalah ini adalah dengan menambahkan baris seperti berikut ini ke Anda.bash_profile
:OS X menangani masalah kompatibilitas CPU secara berbeda dari Linux.
Pada Linux 64-bit di mana Anda juga harus mendukung 32-bit untuk alasan apa pun, Anda berakhir dengan dua salinan hal-hal seperti perpustakaan yang perlu berada dalam kedua format, dengan versi 64-bit dalam
lib64
direktori yang paralel denganlib
direktori tradisional .OS X memecahkan masalah ini secara berbeda, dengan konsep Universal binary, yang memungkinkan Anda memasukkan banyak binari ke dalam satu file. Saat ini Anda dapat memiliki executable yang mendukung hingga 4 jenis CPU: PowerPC 32- dan 64-bit, plus Intel 32- dan 64-bit.
Sangat mudah untuk membangun binari Universal dengan Xcode, tetapi sedikit merepotkan dengan alat-alat baris perintah. Ini membuat Anda membangun Universal-only Intel dengan sistem build berbasis Autoconf:
Tambahkan
-arch ppc -arch ppc64
keCFLAGS
danLDFLAGS
jika Anda membutuhkan dukungan PowerPC.Jika Anda tidak menonaktifkan pelacakan ketergantungan, Anda akhirnya membangun hanya untuk satu platform, karena keberadaan
.o
file yang baru dibangun untuk platform pertama meyakinkanmake(1)
bahwa itu tidak perlu dibangun untuk platform kedua juga. Semuanya harus dibangun dua kali dalam contoh di atas; empat kali untuk biner Universal sepenuhnya, jika Anda masih membutuhkan dukungan PowerPC.(Info lebih lanjut di Catatan Teknis Apple TN2137 .)
Alat pengembang tidak diinstal pada OS X secara default.
Sebelum Lion, tempat yang paling dapat diandalkan untuk mendapatkan alat dev yang tepat untuk sistem Anda adalah pada cakram OS. Itu adalah pemasangan opsional.
Yang menyenangkan tentang menginstal alat dev dari cakram OS adalah Anda tahu alat itu akan bekerja dengan OS. Apple menjadi Apple, Anda harus memiliki versi terbaru OS untuk menjalankan kompiler terbaru, dan mereka tidak selalu membuat unduhan alat lama yang tersedia, jadi cakram OS sering kali merupakan cara termudah untuk menemukan alat yang tepat untuk diberikan. dev atau kotak uji.
Dengan Lion, mereka mencoba untuk menghapus instalasi media, jadi kecuali Anda membeli versi kunci USB yang mahal, Anda harus mengunduh Xcode dari App Store .
Saya sarankan Anda menyimpan setidaknya beberapa versi Xcode DMG yang Anda unduh. Ketika penerus Lion keluar satu atau tiga tahun karena itu, Anda mungkin menemukan diri Anda tanpa cara untuk menginstal versi Xcode kontemporer pada VM uji Lion. Merencanakan ke depan jika masalah ketersediaan dan kurangnya media OS membuat versi lama Xcode tidak dapat diperoleh.
sumber
dyld
,, mengatasi depdendensi!HUGE GOTCHA - filesystem Mac OS TIDAK peka huruf besar-kecil.
sumber
Meskipun Fink dan MacPorts adalah cara tradisional untuk mendapatkan paket unix pada OS X, saya sarankan untuk memeriksa alat yang lebih baru
brew
yang telah bekerja lebih baik untuk saya dan lebih sedikit mengacaukan sistem saya, dan jauh lebih mudah digunakan. Ini pada dasarnya hanya mengunduh tarbal dan menginstal ke / usr / local, tetapi mengotomatiskan seluruh proses dengan sangat baik.http://mxcl.github.com/homebrew/
sumber
Anda dapat membuat image disk case sensitif pada Mac OS X yang dapat dipasang sebagai volume hard drive normal.
sumber
Berikut ini adalah sumber artikel dev yang dipilih, Daftar Literatur Kakao:
http://osx.hyperjeff.net/Reference/CocoaArticles
(Ini mungkin sangat berguna jika suatu hari Anda ingin menggunakan barang tertentu Mac OS X.)
sumber
Ketika porting tumpukan jaringan dari Solaris, BSD, Linux, dan Windows ke OSX, satu-satunya poin utama yang menarik perhatian adalah seperti FreeBSD, seluruh rantai alat cukup lama.
Apple mempercepat dengan OSX Lion tetapi Leopard, Snow Leopard sangat di belakang distribusi Linux modern dan banyak standar tidak didukung. Dalam kasus saya, saya terkena RFC 3678 (Ekstensi Antarmuka Socket untuk Filter Sumber Multicast) menjadi sangat tidak nyaman.
Pada server OSX saya menginstal sistem file case-sensitive karena merekomendasikan untuk melakukannya untuk melayani HTTP.
/proc
Sistem file tidak terlalu berguna ./dev/rtc
,,/dev/hpet
danRDTSC
tampaknya menjadi gimped. OSX menyediakan alternatif asli.epoll
, tapi kamu punyapoll
dan kqueuesumber
OS X mendukung
pthread_cond_timedwait
tetapi menggunakan waktu kalender absolut dan tidak ada cara untuk menggunakan waktu yang meningkat secara monoton.sumber