Özet (Synopsis)
ld files... [options] [-o outputfile]
Açıklama (Description)
ld komutu birkaç nesne dosyasını (object file) ve kütüphaneyi birleştirir, referansları çözümler ve bir çıktı dosyası üretir. ld, nihai bir bağlanmış imaj (yürütülebilir dosya, dylib veya bundle) üretebilir ya da -r seçeneğiyle başka bir nesne dosyası üretebilir. Eğer -o seçeneği kullanılmazsa, üretilen çıktı dosyası "a.out" olarak adlandırılır.
Universal (Çoklu Mimari) Bağlayıcı, universal (çoklu mimarili) girdi dosyalarını kabul eder, ancak her zaman "thin" (tek mimarili), standart bir Mach-O çıktı dosyası oluşturur. Çıktı dosyasının mimarisi -arch seçeneği kullanılarak belirtilir. Bu seçenek kullanılmazsa, ld komut satırı sırasına göre nesne dosyalarını inceleyerek çıktı mimarisini belirlemeye çalışır. Karşılaşılan ilk "thin" mimari, çıktı dosyasının mimarisini belirler. Girdi nesne dosyalarından hiçbiri "thin" bir dosya değilse, ana bilgisayarın yerel 32-bit mimarisi kullanılır.
Genellikle ld doğrudan kullanılmaz. Bunun yerine, derleyici sürücüsü (compiler driver) ld'yi çağırır. Derleyici sürücüsüne birden fazla -arch seçeneği aktarılabilir ve sürücü, ld'yi birden çok kez çağırıp ardından çıktıları universal bir dosyada birleştirmek için lipo(1) aracını çalıştırarak universal bir nihai bağlanmış imaj oluşturacaktır.
Düzen (Layout) Nesne dosyaları komut satırında belirtildikleri sırayla yüklenir. Segmentler ve bu segmentlerdeki kesimler (sections), çıktı dosyasında, bağlanan nesne dosyalarında karşılaşıldıkları sırayla görünecektir. Tüm sıfır dolgulu (zero fill) kesimler, kendi segmentlerindeki tüm sıfır dolgulu olmayan kesimlerden sonra görünecektir.
Kütüphaneler (Libraries) Bir statik kütüphane (diğer adıyla statik arşiv), .o dosyalarındaki global sembolleri listeleyen bir içindekiler tablosuna sahip .o dosyaları koleksiyonudur. ld, bir statik kütüphaneden yalnızca bir sembol referansını çözümlemek için gerektiğinde .o dosyalarını çekecektir. Geleneksel bağlayıcıların aksine ld, bağlama sırasında statik bir kütüphaneyi sürekli olarak aramaya devam eder. Komut satırında statik bir kütüphaneyi birden fazla kez belirtmeye gerek yoktur.
Dinamik bir kütüphane (diğer adıyla dylib veya framework) nihai bağlanmış bir imajdır. Komut satırına dinamik bir kütüphane koymak iki şeye yol açar: 1) Üretilen nihai bağlanmış imaj, o dinamik kütüphaneye bağımlı olduğunu kodlayacaktır. 2) Dinamik kütüphaneden dışa aktarılan (exported) semboller referansları çözümlemek için kullanılır.
Hem dinamik hem de statik kütüphaneler komut satırında göründükleri sırayla aranır.
Arama Yolları (Search paths) ld, kullanılacak bir kütüphane veya framework'ü aramak için dizinlerin bir listesini tutar. Varsayılan kütüphane arama yolu önce /usr/lib, ardından /usr/local/lib'dir. -L seçeneği yeni bir kütüphane arama yolu ekleyecektir. Varsayılan framework arama yolu önce /Library/Frameworks, ardından /System/Library/Frameworks'tür. (Not: Önceden, varsayılan yolun sonunda /Network/Library/Frameworks bulunuyordu. Bu işleve ihtiyacınız varsa, açıkça şunu eklemeniz gerekir: -F/Network/Library/Frameworks). -F seçeneği yeni bir framework arama yolu ekleyecektir. -Z seçeneği standart arama yollarını kaldıracaktır. -syslibroot seçeneği tüm arama yollarının başına bir önek ekleyecektir.
İki Düzeyli Ad Alanı (Two-level namespace) Varsayılan olarak, bir dinamik kütüphaneye çözümlenen tüm referanslar, çözümlendikleri kütüphaneyi kaydeder. Çalışma zamanında (runtime), dyld sembolleri doğrudan çözümlemek için bu bilgiyi kullanır. Alternatif ise -flat_namespace seçeneğini kullanmaktır. Düz ad alanı (flat namespace) ile kütüphane kaydedilmez. Çalışma zamanında dyld, sembolleri çözümlerken yükleme sırasına göre her dinamik kütüphaneyi arayacaktır. Bu daha yavaştır, ancak diğer işletim sistemlerinin sembolleri nasıl çözümlediğine daha çok benzer.
Dolaylı Dinamik Kütüphaneler (Indirect dynamic libraries) Komut satırı dylib A'ya karşı bağlama yapmayı belirtiyorsa ve dylib A derlendiğinde dylib B'ye karşı bağlanmışsa, B dolaylı bir dylib olarak kabul edilir. İki düzeyli ad alanı için bağlama yaparken, doğrudan dylib'ler tarafından yeniden dışa aktarılanlar (re-exported) hariç, ld dolaylı dylib'lere bakmaz. Diğer taraftan, düz ad alanı için bağlama yaparken ld tüm dolaylı dylib'leri yükler ve bunları referansları çözümlemek için kullanır. Dolaylı dylib'ler tam bir yol ile belirtilse bile ld, her dolaylı dylib'i konumlandırmak için önce belirtilen arama yollarını kullanır. Arama yolları kullanılarak biri bulunamazsa, tam yol kullanılır.
Dinamik Kütüphane Tanımsızlıkları (Dynamic libraries undefines) İki düzeyli ad alanı için bağlama yaparken, ld dylib'lerdeki tanımlanmamış sembollerin (undefines) gerçekten var olup olmadığını doğrulamaz. Ancak düz ad alanı için bağlama yaparken ld, tüm yüklü dylib'lerdeki tüm tanımlanmamış sembollerin eşleşen bir tanıma sahip olup olmadığını kontrol eder. Bu bazen seçilen fonksiyonların bir statik kütüphaneden yüklenmesini zorlamak için kullanılır.
Seçenekler (Options)
Çıktı türünü kontrol eden seçenekler: -execute Varsayılan. MH_EXECUTE dosya türüne sahip bir Mach-O ana yürütülebilir dosyası üretir.
-dylib MH_DYLIB dosya türüne sahip bir Mach-O paylaşılan kütüphanesi (shared library) üretir.
-bundle MH_BUNDLE dosya türüne sahip bir Mach-O demeti (bundle) üretir.
-r Nesne dosyalarını birleştirerek MH_OBJECT dosya türüne sahip başka bir Mach-O nesne dosyası üretir.
-dylinker MH_DYLINKER dosya türüne sahip bir Mach-O dylinker üretir. Yalnızca dyld derlenirken kullanılır.
-dynamic Varsayılan. -dylib, -bundle veya -execute tarafından dolaylı olarak seçilir.
-static dyld kullanmayan bir Mach-O dosyası üretir. Yalnızca çekirdek (kernel) derlenirken kullanılır.
-preload mach_header, yükleme komutları (load commands) ve sembol tablosunun herhangi bir segmentte yer almadığı bir Mach-O dosyası üretir. Bu çıktı türü, segmentlerin Mach-O dışına ROM/Flash'a kopyalandığı gömülü sistem (embedded) veya aygıt yazılımı (firmware) geliştirmelerinde kullanılır.
-arch arch_name Çıktı dosyasının hangi mimaride (örneğin ppc, ppc64, i386, x86_64) olması gerektiğini belirtir.
-o path
Çıktı dosyasının adını ve konumunu belirtir. Belirtilmezse a.out kullanılır.
Kütüphaneleri kontrol eden seçenekler
-lx
Bu seçenek, bağlayıcıya kütüphane arama yolunda libx.dylib veya libx.a dosyasını aramasını söyler. Eğer x dizgesi y.o biçimindeyse, dosya adının başına lib getirilmeden veya sonuna .a ya da .dylib eklenmeden aynı yerlerde bu dosya aranır.
-needed-lx -lx ile aynıdır ancak dylib'den hiçbir sembol kullanılmasa bile onunla gerçekten bağlanılması anlamına gelir. Bu sayede, kullanılmayan dylib'ler hakkındaki uyarıları bastırmak için kullanılabilir.
-reexport-lx -lx ile aynıdır ancak x kütüphanesindeki tüm sembollerin, oluşturulan kütüphaneye bağlanan istemciler tarafından kullanılabilir olması gerektiğini belirtir. Bu işlem daha önce ayrı bir -sub_library seçeneğiyle yapılıyordu.
-upward-lx -lx ile aynıdır ancak dylib'in yukarı doğru bir bağımlılık (upward dependency) olduğunu belirtir.
-hidden-lx Statik bir kütüphaneyi konumlandırmak için -lx ile aynıdır, ancak statik kütüphanedeki tüm global sembolleri görünürlükleri gizlenmiş (visibility hidden) gibi değerlendirir. Statik kütüphane kullanan ancak bu statik kütüphaneden hiçbir şeyi dışa aktarmak istemeyen dinamik bir kütüphane derlerken yararlıdır.
-weak-lx -lx ile aynıdır ancak kütüphaneyi ve ona yapılan tüm referansları zayıf içe aktarma (weak import) olarak işaretlenmeye zorlar. Yani, kütüphanenin çalışma zamanında eksik olmasına izin verilir.
-assert-weak-lx -weak-l ile aynıdır ancak zayıf içe aktarma olarak işaretlemeyi zorlamak yerine tüm referansların zayıf içe aktarma olarak işaretlenmiş olduğunu doğrular.
-delay-lx -lx ile aynıdır ancak dylib'in gecikmeli olarak başlatılması (delay initialized) gerektiğini belirtir.
-needed_library path_to_dylib Bağlama satırına path_to_dylib koymakla aynıdır ancak dylib'den hiçbir sembol kullanılmasa bile onunla gerçekten bağlanılması anlamına gelir. Bu sayede, kullanılmayan dylib'ler hakkındaki uyarıları bastırmak için kullanılabilir.
-reexport_library path_to_library Bağlama satırında bir kütüphaneye giden dosya adı yolunu listelemekle aynıdır ve kütüphane yolundaki tüm sembollerin, oluşturulan kütüphaneye bağlanan istemciler tarafından kullanılabilir olması gerektiğini belirtir. Bu işlem daha önce ayrı bir -sub_library seçeneğiyle yapılıyordu.
-upward_library path_to_library Bağlama satırında bir kütüphaneye giden dosya adı yolunu listelemekle aynıdır ancak dylib'i aynı zamanda yukarı doğru bir bağımlılık (upward dependency) olarak işaretler.
-weak_library path_to_library Bağlama satırında bir kütüphaneye giden dosya adı yolunu listelemekle aynıdır, şu farkla ki kütüphaneyi ve ona yapılan tüm referansları zayıf içe aktarma (weak import) olarak işaretlenmeye zorlar.
-assert_weak_library path_to_library -weak_library ile aynıdır ancak bunu zorlamak yerine tüm referansların zayıf içe aktarma (weak import) olarak işaretlenmiş olduğunu doğrular.
-delay_library path_to_library Bağlama satırında bir kütüphaneye giden dosya adı yolunu listelemekle aynıdır, şu farkla ki dylib'i gecikmeli olarak başlatılacak (delay initialized) şeklinde işaretler.
-Ldir Kütüphanelerin aranacağı dizinler listesine dir dizinini ekler. -L ile belirtilen dizinler komut satırında göründükleri sırayla ve varsayılan arama yolundan önce aranır. Xcode4 ve sonrasında, -L ile dizin arasında bir boşluk olabilir.
-Z Kütüphaneleri ve framework'leri ararken standart dizinleri aramaz.
-syslibroot rootdir Kütüphaneleri veya framework'leri ararken tüm arama yollarının başına rootdir dizinini ekler.
-search_paths_first
Bu artık varsayılandır (Xcode4 araçlarında). -lx işlenirken bağlayıcı artık, kütüphane arama yolundaki bir sonraki yola geçmeden önce kendi kütüphane arama yollarındaki her dizinde sırasıyla libx.dylib' ve ardından libx.a' dosyalarını arar.
-search_dylibs_first
Kütüphaneler için arama davranışını değiştirir. Varsayılan olarak -lx işlenirken bağlayıcı, kütüphane arama yollarındaki her dizinde libx.dylib' ve ardından libx.a' dosyalarını arar. Bu seçenek, davranışı önce kütüphane arama yolundaki her dizinde libx.dylib' biçimindeki bir dosyayı arayacak, ardından kütüphane arama yollarında libx.a' biçimindeki bir dosyayı arayacak şekilde değiştirir. Bu seçenek, bağlayıcının Xcode4 öncesindeki arama davranışını geri yükler.
-framework name[,suffix]
Bu seçenek bağlayıcıya framework arama yolunda name.framework/name dosyasını aramasını söyler. İsteğe bağlı son ek (suffix) belirtilirse, framework için önce son ekli ad aranır, ardından son eksiz ad aranır (örneğin önce name.framework/name_suffix aranır, orada yoksa name.framework/name denenir).
-needed_framework name[,suffix] -framework name[,suffix] ile aynıdır ancak framework'ten hiçbir sembol kullanılmasa bile onunla gerçekten bağlanılması anlamına gelir. Bu sayede, kullanılmayan dylib'ler hakkındaki uyarıları bastırmak için kullanılabilir.
-weak_framework name[,suffix] -framework name[,suffix] ile aynıdır ancak framework'ü ve ona yapılan tüm referansları zayıf içe aktarma (weak import) olarak işaretlenmeye zorlar. Not: clang optimizasyonları nedeniyle, fonksiyonlar zayıf (weak) olarak işaretlenmezse, derleyici fonksiyon adresinin NULL olup olmadığına dair kontrolleri optimize ederek devre dışı bırakacaktır (kaldıracaktır).
-assert_weak_framework name[,suffix] -weak_framework ile aynıdır ancak bunu zorlamak yerine tüm referansların zayıf içe aktarma (weak import) olarak işaretlenmiş olduğunu doğrular.
-reexport_framework name[,suffix] -framework name[,suffix] ile aynıdır ancak bu framework'teki tüm sembollerin, oluşturulan kütüphaneye bağlanan istemciler tarafından kullanılabilir olması gerektiğini de belirtir. Bu işlem daha önce ayrı bir -sub_umbrella seçeneğiyle yapılıyordu.
-upward_framework name[,suffix] -framework name[,suffix] ile aynıdır ancak framework'ün yukarı doğru bir bağımlılık (upward dependency) olduğunu da belirtir.
-delay_framework name[,suffix] -framework name[,suffix] ile aynıdır ancak framework'ün gecikmeli olarak başlatılması (delay initialized) gerektiğini de belirtir.
-Fdir Framework'lerin aranacağı dizinler listesine dir dizinini ekler. -F ile belirtilen dizinler komut satırında göründükleri sırayla ve varsayılan arama yolundan önce aranır. Xcode4 ve sonrasında, -F ile dizin arasında bir boşluk olabilir.
-all_load Statik arşiv kütüphanelerinin tüm üyelerini yükler.
-ObjC Bir Objective-C sınıfını, kategorisini veya bir Swift yapısını (struct), sınıfını veya uzantısını (extension) uygulayan statik arşiv kütüphanelerinin tüm üyelerini yükler.
-force_load path_to_archive Belirtilen statik arşiv kütüphanesinin tüm üyelerini yükler. Not: -all_load tüm arşivlerin tüm üyelerinin yüklenmesini zorlar. Bu seçenek ise belirli bir arşivi hedeflemenize izin verir.
-load_hidden path_to_archive Belirtilen statik kütüphaneyi her zamanki gibi kullanır, ancak statik kütüphanedeki tüm global sembolleri görünürlükleri gizlenmiş (visibility hidden) gibi değerlendirir. Statik kütüphane kullanan ancak bu statik kütüphaneden hiçbir şeyi dışa aktarmak istemeyen dinamik bir kütüphane derlerken yararlıdır.
-image_suffix suffix Kütüphaneleri ve framework'leri önce son ekli (suffix) haliyle, ardından son eksiz haliyle arar.
Ek içerikleri kontrol eden seçenekler -sectcreate segname sectname file segname segmentindeki sectname kesimi (section), file dosyasının içeriğinden oluşturulur. Başka bir girdiden gelen bir (segname,sectname) kesimi varsa, bağlayıcı dosyadan gelen içeriği o kesimin sonuna ekleyecektir.
-add_empty_section segname sectname segname segmentinde sectname adında boş bir kesim oluşturur. Girdilerden herhangi biri bir (segname,sectname) kesimi içeriyorsa, o kesim çıktıya dahil edilecek ve bu seçenek yoksayılacaktır.
-add_ast_path file Bağlayıcı çıktı dosyasına, dizgenin file tarafından işaret edilen yol olduğu ve değerinin dosyanın değiştirilme zamanı olduğu bir N_AST stab sembolü ekleyecektir.
-filelist file[,dirname] Bağlayıcının, file dosyasında listelenen dosyaları bağlaması gerektiğini belirtir. Bu, dosyaları komut satırında listelemeye bir alternatiftir. Dosya adları yalnızca satır sonlarıyla ayrılarak her satıra bir tane gelecek şekilde listelenir. (Boşlukların ve sekmelerin dosya adının bir parçası olduğu varsayılır.) İsteğe bağlı dizin adı dirname belirtilirse, liste dosyasındaki her adın başına eklenir.
-dtrace file Nihai bağlanmış bir imaj üretirken dtrace statik sondalarını (static probes) etkinleştirir. file dosyası, statik sondaları bildiren bir DTrace betiği olmalıdır.
Optimizasyonları kontrol eden seçenekler -dead_strip Giriş noktası (entry point) veya dışa aktarılan semboller tarafından erişilemeyen fonksiyonları ve verileri kaldırır.
-order_file file Fonksiyonların ve verilerin düzenlenme sırasını değiştirir. Çıktı dosyasındaki her kesim (section) için, o kesimde yer alan ve order dosyası file içinde belirtilen herhangi bir sembol, kendi kesiminin başlangıcına taşınır ve order dosyası file içindeki sırayla düzenlenir. Order dosyaları, her satırda bir sembol adı bulunan metin dosyalarıdır. # ile başlayan satırlar yorumdur. Bir sembol adının önüne isteğe bağlı olarak nesne dosyasının yaprak adı (leaf name) ve iki nokta üst üste getirilebilir (örneğin foo.o:_foo). Bu, birden fazla dosyada bulunan statik fonksiyonlar/veriler için yararlıdır. Bir sembol adının önüne isteğe bağlı olarak mimari de getirilebilir (örneğin ppc:_foo veya ppc:foo.o:_foo). Bu, birden fazla mimari için çalışan tek bir order dosyasına sahip olmanızı sağlar. Harfi harfine (literal) C-string dizgeleri, order dosyasında dizge tırnak içine alınarak (örneğin "Hello, world\n") sıralanabilir.
-no_order_inits -order_file seçeneği kullanılmadığında, bağlayıcı fonksiyonları nesne dosyası sırasına göre düzenler ve tüm başlatıcı (initializer) rutinleri __text kesiminin başlangıcına, sonlandırıcı (terminator) rutinleri ise sonuna taşır. Başlatıcıların ve sonlandırıcıların bu otomatik olarak yeniden düzenlenmesini devre dışı bırakmak için bu seçeneği kullanın.
-platform_version platform min_version sdk_version Platformu, çıktının üzerinde kullanılacağı o platformun desteklenen en eski sürümünü ve çıktının derlendiği SDK'yı belirtmek için ayarlanır. platform, <mach-o/loader.h> içinde tanımlandığı gibi sayısal bir değerdir veya aşağıdaki dizgilerden biri olabilir: • macos • ios • tvos • watchos • bridgeos • visionos • xros • mac-catalyst • ios-simulator • tvos-simulator • watchos-simulator • visionos-simulator • xros-simulator • driverkit • firmware • sepOS Daha yeni bir minimum veya SDK sürümü belirtmek, bağlayıcının çıktı dosyasında o işletim sisteminin veya SDK'nın özelliklerini varsayabilmesini sağlar. min_version ve sdk_version biçimi, 10.13 veya 10.14 gibi bir sürüm numarasıdır.
-macos_version_min version Çıktının kullanılacağı en eski macOS sürümünü belirtmek için ayarlanır. Daha sonraki bir sürüm belirtmek, bağlayıcının çıktı dosyasında o işletim sisteminin özelliklerini varsayabilmesini sağlar. version biçimi, 10.9 veya 10.14 gibi bir macOS sürüm numarasıdır.
-ios_version_min version Çıktının kullanılacağı en eski iOS sürümünü belirtmek için ayarlanır. Daha sonraki bir sürüm belirtmek, bağlayıcının çıktı dosyasında o işletim sisteminin özelliklerini varsayabilmesini sağlar. version biçimi, 3.1 veya 4.0 gibi bir iOS sürüm numarasıdır.
-image_base address Bir dylib veya bundle için tercih edilen yükleme adresini belirtir. address bağımsız değişkeni, başında isteğe bağlı olarak 0x bulunan onaltılık (hexadecimal) bir sayıdır. Bir programın yüklediği tüm dylib'ler ve bundle'lar için çakışmayan adresler seçilerek, başlatma süresi iyileştirilebilir; çünkü dyld'nin imajı "yeniden konumlandırmasına" (rebase - yani imaj içindeki göstericileri yüklenen adreste çalışacak şekilde ayarlamasına) gerek kalmayacaktır. Çoğu zaman bu seçeneği kullanmamak, bunun yerine rebase(1) aracını kullanmak ve ona dylib'lerin bir listesini vermek daha kolaydır. Bu araç daha sonra liste için çakışmayan adresler seçecek ve hepsini yeniden konumlandıracaktır (rebase). Konumdan bağımsız bir yürütülebilir dosya (position independent executable) derlenirken bu seçenek yoksayılacaktır. Bu seçeneğe uyumluluk amacıyla -seg1addr da denir.
-no_implicit_dylibs İki düzeyli ad alanına sahip nihai bir bağlanmış imaj oluştururken, normalde bağlayıcı, iki düzeyli ad alanı kodlamasını dyld için daha verimli hale getirmek amacıyla örtük olarak bağlanmış genel dylib'leri yukarı kaldırır. Örneğin, Cocoa AppKit'i ve AppKit Foundation'ı yeniden dışa aktarır (re-export). Eğer -framework Cocoa ile bağlanır ve Foundation'dan bir sembol kullanırsanız, bağlayıcı Foundation'ı yüklemek için örtük olarak bir yükleme komutu (load command) ekleyecek ve sembolü Foundation'dan geliyor olarak kodlayacaktır. Bu seçeneği kullanırsanız, bağlayıcı Foundation için bir yükleme komutu eklemeyecek ve sembolü Cocoa'dan geliyor olarak kodlayacaktır. Bu durumda çalışma zamanında dyld, sembolü Foundation'da bulmadan önce Cocoa and AppKit'i aramak zorunda kalacaktır.
-no_zero_fill_sections Varsayılan olarak bağlayıcı tüm sıfır dolgulu (zero fill) kesimleri __DATA segmentinin sonuna taşır ve bunları diskte yer kaplamayacak şekilde yapılandırır. Bu seçenek bu optimizasyonu bastırır, böylece sıfır dolgulu veriler nihai bir bağlanmış imajda diskte yer kaplar.
-merge_zero_fill_sections __DATA segmentindeki tüm sıfır dolgulu (zero-fill) kesimlerin tek bir __zerofill kesiminde birleştirilmesine neden olur.
-no_branch_islands Maksimum dal (branch) mesafesinden daha büyük imajların oluşturulmasına izin veren dal adalarının (branch islands) bağlayıcı tarafından oluşturulmasını devre dışı bırakır. Kod birden fazla kesimde olduğunda ancak hepsi dal aralığı içinde olduğunda -preload ile birlikte yararlıdır.
-verbose_branch_islands Eklenen dal adaları (branch islands) ve bunların kod boyutu ek yükü hakkında boyut bilgilerini yazdırır.
-O0 Derleme süresini optimize etmek için belirli optimizasyonları ve düzen algoritmalarını devre dışı bırakır. Bu seçenek, artımlı (incremental) geliştirmeyi hızlandırmak için hata ayıklama (debug) derlemeleriyle birlikte kullanılmalıdır. Tam uygulama, amaca uyacak şekilde değişebilir.
-reproducible Varsayılan olarak çıktı içeriği belirleyici (deterministic) olacaktır, ancak derleme zamanı gibi girdi dosyalarındaki küçük değişiklikler, bağlanan ikili dosyadaki (binary) belirli veri yapılarını etkileyebilir. Bu seçenek ld'ye, belirli girdi özelliklerini yoksayarak veya alternatif algoritmalar kullanarak yeniden üretilebilir (reproducible) bir çıktı ikilisi oluşturmasını söyler.
Bir dinamik kütüphane (dylib) oluştururken kullanılan seçenekler -install_name name Dinamik bir kütüphanede dahili bir "yükleme yolu" (LC_ID_DYLIB) ayarlar. Kütüphaneye bağlanan tüm istemciler, dyld'nin bu kütüphaneyi bulması gereken yol olarak bu yolu kaydedecektir. Bu seçenek belirtilmezse, -o yolu kullanılacaktır. Bu seçeneğe uyumluluk amacıyla -dylib_install_name de denir.
-compatibility_version number Kütüphanenin uyumluluk sürüm numarasını belirtir. Bir kütüphane dyld tarafından yüklendiğinde uyumluluk sürümü kontrol edilir ve programın sürümü kütüphanenin sürümünden büyükse bu bir hatadır. number biçimi X[.Y[.Z]] şeklindedir; burada X, 65535'e eşit veya daha küçük, pozitif ve sıfır olmayan bir sayı olmalıdır, .Y ve .Z ise isteğe bağlıdır ve varsa 255'e eşit veya daha küçük, negatif olmayan sayılar olmalıdır. Uyumluluk sürüm numarası belirtilmezse, değeri 0 olur ve kütüphane kullanıldığında herhangi bir kontrol yapılmaz. Bu seçeneğe uyumluluk amacıyla -dylib_compatibility_version da denir.
-current_version number Kütüphanenin mevcut sürüm numarasını belirtir. Kütüphanenin mevcut sürümü, kütüphanenin kullanıcısı tarafından programatik olarak elde edilebilir, böylece kütüphanenin tam olarak hangi sürümünü kullandığını belirleyebilir. number biçimi X[.Y[.Z]] şeklindedir; burada X, 65535'e eşit veya daha küçük, pozitif ve sıfır olmayan bir sayı olmalıdır, .Y ve .Z ise isteğe bağlıdır ve varsa 255'e eşit veya daha küçük, negatif olmayan sayılar olmalıdır. Sürüm numarası belirtilmezse, değeri 0 olur. Bu seçeneğe uyumluluk amacıyla -dylib_current_version da denir.
Bir ana yürütülebilir dosya oluştururken kullanılan seçenekler -pie Bu konumdan bağımsız olan özel bir ana yürütülebilir dosya türü (PIE) yapar. Mac OS X 10.5 ve sonrasında, işletim sistemi her çalıştırıldığında bir PIE'yi rastgele bir adrese yükleyecektir. -mdynamic-no-pic ile derlenmiş .o dosyalarından bir PIE oluşturamazsınız. Bu, kod üretiminin (codegen) daha az optimal olduğu anlamına gelir, ancak adres rastgeleleştirmesi bazı güvenlik avantajları ekler. Mac OS X 10.7 veya sonrasını hedeflerken, ana yürütülebilir dosyalar için PIE varsayılandır.
-no_pie Konumdan bağımsız bir yürütülebilir dosya (PIE) yapmaz. 10.6 ve öncesini hedeflerken bu varsayılandır.
-pagezero_size size Varsayılan olarak bağlayıcı, adres sıfırdan başlayan __PAGEZERO adında okunamaz bir segment oluşturur. Varlığı, bir NULL göstericiye (dereference) başvurulduğunda veri yolu hatasına (bus error) neden olur. size argümanı, başında isteğe bağlı olarak 0x bulunan onaltılık (hexadecimal) bir sayıdır. size sıfır ise, bağlayıcı bir page zero segmenti oluşturmayacaktır. Varsayılan olarak 32-bit mimarilerde page zero boyutu 4KB'dir. 64-bit mimarilerde varsayılan boyut 4GB'dir.
-stack_size size Bir programdaki ana iş parçacığı (main thread) için maksimum yığın (stack) boyutunu belirtir. Bu seçenek olmasaydı bir program 8MB'lık bir yığına sahip olurdu. size argümanı, başında isteğe bağlı olarak 0x bulunan onaltılık (hexadecimal) bir sayıdır. Boyut, mimarinin sayfa boyutunun (4KB veya 16KB) bir katı olmalıdır.
-allow_stack_execute Yürütülebilir dosyayı, görevdeki tüm yığınlara yığın yürütme (stack execution) ayrıcalığı verilecek şekilde işaretler. Buna pthread yığınları da dahildir. Bu seçenek yalnızca yığın yürütmeyi destekleyen mimariler (yani Intel) hedeflendiğinde geçerlidir.
-export_dynamic LTO sırasında ana yürütülebilir dosyalardaki tüm global sembolleri korur. Bu seçenek olmadan, Bağlantı Zamanı Optimizasyonu'nun (LTO) global fonksiyonları satır içi (inline) yapmasına ve kaldırmasına izin verilir. Bu seçenek, bir ana yürütülebilir dosya, ana yürütülebilir dosyadan belirli semboller gerektiren bir eklenti (plug-in) yükleyebileceğinde kullanılır.
Bir demet (bundle) oluştururken kullanılan seçenekler -bundle_loader executable Bağlanan bundle çıktı dosyasını yükleyecek olan yürütülebilir dosyayı belirtir. Demetteki tanımlanmamış semboller, demetin bağlandığı dinamik kütüphanelerden biriymiş gibi belirtilen yürütülebilir dosyaya göre kontrol edilir.
Bir nesne dosyası oluştururken kullanılan seçenekler -keep_private_externs Özel harici (private external - diğer adıyla visibility=hidden) sembolleri statik sembollere dönüştürmez, bunun yerine bunları elde edilen nesne dosyasında özel harici olarak bırakır.
-d Ortak sembollerin tanımlanmasını zorlar. Yani, geçici tanımları gerçek tanımlara dönüştürür.
Sembol çözümlemeyi kontrol eden seçenekler -exported_symbols_list filename Belirtilen filename, çıktı dosyasında global semboller olarak kalacak global sembol adlarının bir listesini içerir. Diğer tüm global semboller, private_extern (diğer adıyla visibility=hidden) olarak işaretlenmiş gibi değerlendirilecek ve çıktı dosyasında global olmayacaktır. filename içinde listelenen sembol adları her satıra bir tane gelecek şekilde olmalıdır. Başta ve sondaki boşluklar sembol adının bir parçası değildir. # ile başlayan satırlar ve yalnızca boşluk içeren satırlar yoksayılır. Bazı joker karakterler (kabuk dosya eşleştirmesine benzer şekilde) desteklenir. * sıfır veya daha fazla karakterle eşleşir. ? bir karakterle eşleşir. [abc] 'a', 'b' veya 'c' olması gereken tek bir karakterle eşleşir. [a-z] 'a' ile 'z' arasındaki herhangi bir küçük harfle eşleşir.
-exported_symbol symbol Belirtilen symbol, çıktı dosyasında global semboller olarak kalacak global sembol adları listesine eklenir. Bu seçenek birden fazla kez kullanılabilir. Kısa listeler için bu, bir dosya oluşturup -exported_symbols_list kullanmaktan daha pratik olabilir.
-no_exported_symbols Eklentisi (plugin) olmayan ve bu nedenle sembol dışa aktarımına ihtiyaç duymayan ana yürütülebilir dosyalar için yararlıdır.
-unexported_symbols_list file Belirtilen file, çıktı dosyasında global semboller olarak kalmayacak global sembol adlarının bir listesini içerir. Bu semboller, private_extern (diğer adıyla visibility=hidden) olarak işaretlenmiş gibi değerlendirilecek ve çıktı dosyasında global olmayacaktır. file içinde listelenen sembol adları her satıra bir tane gelecek şekilde olmalıdır. Başta ve sondaki boşluklar sembol adının bir parçası değildir. # ile başlayan satırlar ve yalnızca boşluk içeren satırlar yoksayılır. Bazı joker karakterler (kabuk dosya eşleştirmesine benzer şekilde) desteklenir. * sıfır veya daha fazla karakterle eşleşir. ? bir karakterle eşleşir. [abc] 'a', 'b' veya 'c' olması gereken tek bir karakterle eşleşir. [a-z] 'a' ile 'z' arasındaki herhangi bir küçük harfle eşleşir. -const_selrefs Varsayılan olarak bağlayıcı, hedef işletim sistemi sürümünün bunu desteklediğini bildiğinde __objc_selrefs kesimini __DATA_CONST içine taşır. Bu seçenek varsayılan davranışı geçersiz kılar ve __objc_selrefs kesiminin __DATA_CONST içinde olmasını zorlar. Bunun yalnızca __DATA_CONST segmenti etkinleştirildiğinde geçerli olduğunu unutmayın. Daha fazla bilgi için -data_const seçeneğine bakın.
-no_const_selrefs Varsayılan olarak bağlayıcı, hedef işletim sistemi sürümünün bunu desteklediğini bildiğinde __objc_selrefs kesimini __DATA_CONST içine taşır. Bu seçenek varsayılan davranışı geçersiz kılar ve __objc_selrefs kesimini __DATA içinde tutar.
-version_details Bağlayıcı hakkındaki sürüm bilgilerini JSON biçiminde yazdırır.
-no_weak_imports Herhangi bir sembol zayıf içe aktarma (weak import - yani çalışma zamanında çözümlenmemiş (NULL) olmasına izin verilen sembol) ise hata verir. Aynı işletim sistemi sürümünde derlendiklerini ve çalıştırıldıklarını varsayan yapılandırma (config) tabanlı projeler için yararlıdır.
-no_deduplicate Bağlayıcıda yinelenenleri kaldırma (deduplication) geçişini çalıştırmaz.
-verbose_deduplicate Yinelenenleri kaldırma işlemi ile elenen fonksiyonların adlarını ve toplam kod tasarrufu boyutunu yazdırır.
-no_inits Çıktı herhangi bir statik başlatıcı (initializer) içeriyorsa hata verir.
-no_warn_inits Çıktı herhangi bir statik başlatıcı içerdiğinde uyarı vermez.
-warn_duplicate_libraries Girdi yinelenen kütüphane seçenekleri içerdiğinde uyarır.
-no_warn_duplicate_libraries Girdi yinelenen kütüphane seçenekleri içerdiğinde uyarı vermez.
-no_warn_reduced_section_align Bir girdi kesiminin (section) hizalaması (alignment) kendi segmentinin maksimum hizalamasını aştığında ve segment hizalamasıyla eşleşecek şekilde azaltıldığında uyarı vermez.
-debug_variant Yalnızca müşterilere gönderilen ikili dosyalar için sorun teşkil eden konular hakkında uyarı vermez.
-unaligned_pointers treatment __DATA segmentlerindeki hizalanmamış göstericilerin (unaligned pointers) nasıl ele alınacağını belirtir. Seçenekler şunlardır: 'warning', 'error' veya 'suppress'. arm64e için varsayılan değer 'error' iken, diğer tüm mimariler için 'suppress'tir.
-dirty_data_list filename Kirletilme (dirty) olasılığı yüksek olan veri sembollerinin adlarını içeren bir dosya belirtir. Eğer bağlayıcı bir __DATA_DIRTY segmenti oluşturuyorsa, bu semboller o segmente taşınacaktır.
-max_default_common_align value Açık bir hizalaması bulunmayan ortak semboller (diğer adıyla geçici tanımlar veya başlatılmamış (sıfırlanmış) değişkenler), normalde bir sonraki iki üzeri boyuta hizalanır (örneğin 240 baytlık bir dizi 256'ya hizalanır). Bu seçenek, maksimum hizalamayı azaltmanıza olanak tanır. Örneğin, 0x40 değeri 240 baytlık bir dizinin hizalamasını (256 yerine) 64 bayta düşürür. Belirtilen değer onaltılık (hexadecimal) tabanda ikinin bir kuvveti olmalıdır. -max_default_common_align kullanılmazsa, varsayılan hizalama -preload için zaten 0x8 (2^3) baytla ve diğer tüm çıktı türleri için 0x8000 (2^15) ile sınırlandırılmıştır.
-move_to_rw_segment segment_name filename Veri sembollerini başka bir segmente taşır. Komut satırı seçeneği, hedef segment adını ve taşınacak sembollerin listesini içeren bir dosyanın yolunu belirtir. Yorumlar, sembol dosyasındaki bir satırın başına # getirilerek eklenebilir. Bir sembol adının birden fazla örneği varsa (örneğin birden fazla dosyada "static int foo=5;" bulunması gibi), belirli bir örneği taşımak için sembol listesi dosyasındaki sembol adının önüne nesne dosyası adı eklenebilir (örneğin "init.o:_foo").
-move_to_ro_segment segment_name filename Kod sembolerini başka bir segmente taşır. Komut satırı seçeneği, hedef segment adını ve taşınacak sembollerin listesini içeren bir dosyanın yolunu belirtir. Yorumlar, sembol dosyasındaki bir satırın başına # getirilerek eklenebilir. Bir sembol adının birden fazla örneği varsa (örneğin birden fazla dosyada "static int foo() {}" bulunması gibi), belirli bir örneği taşımak için sembol listesi dosyasındaki sembol adının önüne nesne dosyası adı eklenebilir (örneğin "init.o:_foo").
-rename_section orgSegment orgSection newSegment newSection orgSegment/orgSection kesimini newSegment/newSection olarak yeniden adlandırır.
-rename_segment orgSegment newSegment orgSegment segment adına sahip tüm kesimleri newSegment segment adına sahip olacak şekilde yeniden adlandırır.
-trace_symbol_layout -rename_section, -rename_segment, -move_to_ro_segment ve -move_to_rw_segment seçeneklerinin hata ayıklamasında kullanılmak üzere: Bu seçenek, her sembolün nereye ve neden taşındığını gösteren bir satır yazdırır. Not: Bu seçenekler zincirleme olarak uygulanır. Bağlayıcı her sembol için önce -move_to_ro_segment ve -move_to_rw_segment seçeneklerini kontrol eder. Ardından tüm -rename_section seçeneklerini uygular ve son olarak -rename_segment seçeneklerini uygular.
-trace_symbol_layout_file symbol_layout_file_path -trace_symbol_layout ile aynıdır ancak izleme (trace) verilerini yazmak için bir symbol_layout_file_path kabul eder.
-trace_implicit_libraries Beklenmeyen kütüphane bağımlılıklarını izlemek için kullanılan hata ayıklama seçeneğidir. Otomatik bağlama ipuçları (auto-linking hints) aracılığıyla örtük olarak bağlanan kütüphaneleri (hangi girdi dosyalarının ipuçlarını içerdiğini göstererek) ve açıkça bağlanmış kütüphaneler tarafından yeniden dışa aktarılan dolaylı kütüphaneleri günlüğe kaydeder.
-trace_implicit_library name_substring -trace_implicit_libraries ile aynıdır ancak kütüphanelerin yalnızca bir alt kümesini izlemek için bir name_substring kabul eder.
-section_order segname colon_separated_section_list Yalnızca -preload, -dylinker, -static veya -platform_version "firmware"/"sepOS" ile kullanım içindir. Bağlayıcının, belirtilen segment için kesimleri hangi sırayla düzenlemesi gerektiğini belirtir. Örneğin: "-section_order __ROM __text:__const:__cstring". Belirtilen kesimler, segment içinde ilk olarak yerleştirilenlerdir. Geriye kalan belirtilmemiş kesimler, -section_order belirtilmemiş olsaydı sahip olacakları sıraya göre düzenlenir.
-segment_order colon_separated_segment_list Yalnızca -preload, -static veya -platform_version "firmware" ile kullanım içindir. Bağlayıcının segmentleri hangi sırayla düzenlemesi gerektiğini belirtir. Örneğin: "-segment_order __ROM:__ROM2:__RAM". Tüm segmentler belirtilmelidir.
-allow_heap_execute Normalde i386 ana yürütülebilir dosyaları, Mac OS X 10.7 ve üzeri çekirdeğinin yalnızca yürütme (x-bit) biti olan sayfaların talimatları yürütmesine izin verecek şekilde işaretlenir. Bu seçenek bu davranışı geçersiz kılar ve herhangi bir sayfadaki talimatların yürütülmesine izin verir.
-application_extension Kodun bir uygulama uzantısında (application extension) kullanılmak üzere bağlandığını belirtir. Bağlayıcı daha sonra, bağlanan tüm dinamik kütüphanelerin uygulama uzantılarında kullanım için güvenli olduğunu doğrulayacaktır.
-no_application_extension Adlandırılan kodun bir uygulama uzantısında (application extension) kullanım için güvenli olmadığını belirtir. Örneğin, bir uygulama uzantısında kullanılmaması gereken bir framework oluştururken kullanılabilir.
-fatal_warnings Herhangi bir uyarı verilirse bağlayıcının sıfır olmayan bir değerle çıkış yapmasına neden olur.
-no_eh_labels Normalde -r modunda, bağlayıcı __eh_frame kesimindeki tüm FDE'lerde .eh etiketleri üretir. Bu seçenek bu etiketleri bastırır. Bu etiketler Mac OS X 10.6 bağlayıcısı tarafından gerek duyulmaz ancak daha eski bağlayıcı araçları tarafından ihtiyaç duyulur.
-warn_compact_unwind Nihai bağlanmış bir imaj üretirken bağlayıcı __eh_frame kesimini işler ve bir __unwind_info kesimi üretir. __eh_frame içindeki çoğu FDE girdisi, __unwind_info kesiminde 32-bitlik bir değerle temsil edilebilir. Bu seçenek, FDE'si sıkıştırılmış geri sarma (compact unwind) biçiminde ifade edilemeyen herhangi bir fonksiyon için bir uyarı verir.
-warn_weak_exports Elde edilen nihai bağlanmış imaj zayıf harici semboller içeriyorsa bir uyarı verir. Bu tür semboller, çalışma zamanında bu sembolleri birleştirmek (coalesce) için dyld'nin başlatma sırasında fazladan iş yapmasını gerektirir.
-no_weak_exports Elde edilen nihai bağlanmış imaj zayıf harici semboller içeriyorsa bir hata verir. Bu tür semboller, çalışma zamanında bu sembolleri birleştirmek (coalesce) için dyld'nin başlatma sırasında fazladan iş yapmasını gerektirir.
-warn_unused_dylibs Bağlanmış olan ancak kendilerinden hiçbir sembol kullanılmayan dylib'ler hakkında uyarır.
-no_warn_unused_dylibs Bağlanmış olan ancak kendilerinden hiçbir sembol kullanılmayan dylib'ler hakkında uyarı vermez.
-dead_strip_dylibs Giriş noktası (entry point) veya dışa aktarılan semboller tarafından erişilemeyen dylib'leri kaldırır. Yani, bağlama sırasında hiçbir sembol sağlamayan dylib'ler için yükleme komutu (load command) üretilmesini bastırır. Bu seçenek, dylib'in önemli bir başlatıcıya (initializer) sahip olması gibi dolaylı bir nedenden dolayı çalışma zamanında gerekli olan bir dylib'e karşı bağlama yaparken kullanılmamalıdır.
-allow_sub_type_mismatches Normalde bağlayıcı, ARM için farklı CPU alt tiplerini (örneğin armv4t ve armv6) derleme zamanında karıştırılamayacak farklı mimariler olarak kabul eder. Bu seçenek bu gereksinimi gevşeterek, farklı ARM alt tipleri için derlenmiş nesne dosyalarını karıştırmanıza olanak tanır.
-no_uuid Çıktı dosyasında bir LC_UUID yükleme komutu üretmeyin. UUID'si olmayan ikili dosyaların, hata ayıklayıcının (debugger) ve kilitlenme bildirim araçlarının ikili dosyayı izlemesini ve incelemesini engelleyebileceği konusunda uyarılmalıdır.
-random_uuid Çıktı dosyasında rastgele bir LC_UUID yükleme komutu üretin. Varsayılan olarak bağlayıcı, çıktı dosyasının UUID'sini çıktı dosyasının içeriğinin karmasına (hash) dayanarak üretir. Ancak çok büyük çıktı dosyaları için karma işlemi bağlamayı yavaşlatabilir. Karma tabanlı bir UUID kullanılması yeniden üretilebilir derlemeler (reproducible builds) için önemlidir, ancak yalnızca hızlı hata ayıklama derlemeleri yapıyorsanız, -random_uuid kullanmak tamamlanma süresini iyileştirebilir.
-root_safe Çıktı dosyasının mach başlığında MH_ROOT_SAFE bitini ayarlar.
-setuid_safe Çıktı dosyasının mach başlığında MH_SETUID_SAFE bitini ayarlar.
-interposable Bir dinamik kütüphane oluştururken dışa aktarılan tüm sembollere erişimi dolaylı hale getirir.
-init symbol_name Belirtilen symbol_name ilk başlatıcı (initializer) olarak çalıştırılacaktır. Yalnızca dinamik bir kütüphane oluştururken kullanılır.
-sub_library library_name Belirtilen dylib yeniden dışa aktarılacaktır. Örneğin /usr/lib/libobjc_profile.A.dylib için library_name "libobjc" olacaktır. Yalnızca dinamik bir kütüphane oluştururken kullanılır.
-sub_umbrella framework_name Belirtilen framework yeniden dışa aktarılacaktır. Yalnızca dinamik bir kütüphane oluştururken kullanılır.
-allowable_client name Oluşturulmakta olan dinamik kütüphaneye nelerin bağlanabileceğini kısıtlar. Varsayılan olarak herhangi bir kod herhangi bir dylib'e bağlanabilir. Ancak bir dylib'in küçük bir istemci grubu için özel olması gerekiyorsa, her istemci için bir -allowable_client ekleyerek bunu resmileştirebilirsiniz. Bir istemci libfoo.1.dylib ise -allowable_client adı "foo" olur. Bir istemci Foo.framework ise -allowable_client adı "Foo" olur. Hiç kimsenin bir dylib'e asla bağlanmamasını istediğiniz uç durum için -allowable_client değerini "!" olarak ayarlayabilirsiniz.
-client_name name Bir bundle'ın, -allowable_client ile oluşturulmuş bir dylib'e bağlanmasını sağlar. Belirtilen ad, dylib oluşturulduğunda belirtilen -allowable_client adlarından biriyle eşleşmelidir.
-umbrella framework_name Bağlanan dylib'in, belirtilen addaki bir umbrella framework aracılığıyla yeniden dışa aktarıldığını belirtir.
-headerpad size Yükleme komutlarının (load commands) gelecekteki genişlemesi için minimum alanı belirtir. Yalnızca daha sonra yükleme komutlarını değiştirmek için install_name_tool çalıştırılması düşünülüyorsa yararlıdır. size onaltılık (hexadecimal) bir sayıdır.
-headerpad_max_install_names Tüm yolların MAXPATHLEN değerine kadar genişleyebilmesi için yükleme komutlarının gelecekteki genişlemesi için otomatik olarak alan ekler. Yalnızca daha sonra yükleme komutlarını değiştirmek için install_name_tool çalıştırılması düşünülüyorsa yararlıdır.
-bind_at_load Ortaya çıkan ikili dosyanın mach başlığında bir bit ayarlar ve bu bit dyld'ye, tembel (lazy) bağlama yapmak yerine ikili dosya yüklendiğinde tüm sembolleri bağlamasını söyler.
-force_flat_namespace Ortaya çıkan ikili dosyanın mach başlığında bir bit ayarlar ve bu bit dyld'ye yalnızca bu ikili dosya için düz ad alanı (flat namespace) kullanmasını değil, süreçte yüklenen tüm dylib'ler ve bundle'lar üzerinde düz ad alanı bağlamayı zorlamasını söyler. Yalnızca ana yürütülebilir dosyalar bağlanırken kullanılabilir.
-sectalign segname sectname value segname segmentindeki sectname adlı kesimin hizalaması (alignment) value değerine ayarlanır; burada value, 2'nin tam sayı kuvveti olması gereken onaltılık (hexadecimal) bir sayıdır.
-stack_addr address Yığın göstericisi (stack pointer) değerinin başlangıç adresini belirtir; burada değer, bir sayfa sınırına yuvarlanmış onaltılık (hexadecimal) bir sayıdır.
-segprot segname max_prot init_prot
Belirtilen segmentin (name) maksimum ve başlangıç sanal bellek korumasını sırasıyla max ve init olarak belirtir. max ve init değerleri r (okuma), w (yazma), x (yürütme) ve - (erişim yok) karakterlerinin herhangi bir kombinasyonudur. x86_64 mimarisi hariç, max_prot her zaman init_prot ile aynı değere ayarlanacaktır.
-seg_addr_table filename Dinamik kütüphaneler için temel (base) adresleri içeren bir dosya belirtir. Dosyanın her satırı onaltılık bir temel adres, ardından boşluk ve ardından ilgili dylib'in yükleme adından (install name) oluşur. # karakteri bir yorumu belirtir.
-segs_read_write_addr address Salt okunur (read-only) ve okunur-yazılır (read-write) segmentlerin bitişik olmadığı bir dinamik kütüphanenin derlenmesine olanak tanır. Belirtilen adres, okunur-yazılır segmentler için temel adresi gösteren onaltılık bir sayıdır.
-segs_read_only_addr address Salt okunur (read-only) ve okunur-yazılır (read-write) segmentlerin bitişik olmadığı bir dinamik kütüphanenin derlenmesine olanak tanır. Belirtilen adres, salt okunur segmentler için temel adresi gösteren onaltılık bir sayıdır.
-segaddr name address name adlı segmentin başlangıç adresinin address olacağını belirtir. Adres, 4K sayfa boyutunun katı olan onaltılık bir sayı olmalıdır.
-seg_page_size name size Belirtilen segment tarafından kullanılan sayfa boyutunu belirtir. Varsayılan olarak tüm segmentler için sayfa boyutu 4096'dır. Bağlayıcı segmentleri, bir segmentin boyutu her zaman sayfa boyutunun çift bir katı olacak şekilde düzenleyecektir.
-dylib_file install_name:file_name Dinamik bir paylaşılan kütüphanenin standart konumundan farklı bir konumda olduğunu belirtir. Bu seçeneği, dinamik bir kütüphaneye bağımlı olan bir kütüphaneyle bağlama yaparken ve dinamik kütüphane varsayılan konumundan başka bir konumda olduğunda kullanın. install_name kütüphanenin normalde bulunduğu yolu belirtir. file_name ise bunun yerine kullanmak istediğiniz kütüphanenin yolunu belirtir. Örneğin, libsys dinamik kütüphanesine bağımlı bir kütüphaneye bağlanıyorsanız ve libsys varsayılan olmayan bir konumda kuruluysa, şu seçeneği kullanırsınız: -dylib_file /lib/libsys_s.A.dylib:/me/lib/libsys_s.A.dylib.
-prebind Oluşturulan çıktı dosyası önceden bağlanmış (prebound) biçimde olacaktır. Bu, başlatma performansını artırmak amacıyla Mac OS X 10.3 ve öncesinde kullanılmıştır.
-weak_reference_mismatches treatment Bir sembol bir nesne dosyasında zayıf içe aktarılmış (weak-imported) ancak bir diğerinde zayıf içe aktarılmamışsa ne yapılacağını belirtir. Geçerli işlemler şunlardır: error, weak veya non-weak. Varsayılan değer non-weak'tir.
-deployment_target_mismatches treatment -platform_version kullanılarak belirtilen hedeften daha düşük bir dağıtım hedefine (deployment target) sahip bir nesne dosyasını bağlarken ne yapılacağını belirtir. Geçerli işlemler şunlardır: error, warning, suppress. Varsayılan değer warning'dir.
-read_only_relocs treatment Salt okunur segmentlerde yeniden konumlandırmaların (relocations) kullanılmasını etkinleştirir. Seçenekler şunlardır: 'warning', 'error' veya 'suppress'. Dinamik ikili dosyalar için varsayılan ve desteklenen tek seçenek 'error'dur. Diğer işlemler aygıt yazılımları (firmware) veya gömülü hedeflerle kullanım için ayrılmıştır.
-force_cpusubtype_ALL Bu yalnızca -arch ppc ile geçerlidir. Bağlayıcıya nesne dosyalarında kodlanmış olan PowerPC CPU gereksinimlerini (örneğin G3, G4 veya G5) yoksaymasını ve elde edilen ikili dosyayı herhangi bir PowerPC CPU'sunda çalıştırılabilir olarak işaretlemesini söyler.
-dylinker_install_name path Yalnızca dyld derlenirken kullanılır.
-no_arch_warnings -arch bayrağı için yanlış mimariye sahip olan dosyalar hakkındaki uyarı mesajlarını bastırır.
-arch_errors_fatal -arch bayrağı için yanlış mimariye sahip olan dosyalar hakkındaki uyarıları hataya dönüştürür.
-e symbol_name Bir ana yürütülebilir dosyanın giriş noktasını (entry point) belirtir. Varsayılan olarak giriş adı "start"tır; bu, main() fonksiyonunu kurmak ve çağırmak için gerekli bağlayıcı kodu içeren crt1.o içinde bulunur.
-w Tüm uyarı mesajlarını bastırır.
-final_output name -install_name kullanılmadığında bir dylib'in yükleme adını belirtir. Bu seçenek, derleyici sürücüsü birden fazla -arch argümanıyla çağrıldığında derleyici sürücüsü tarafından kullanılır.
-arch_multiple Bağlayıcının hata ve uyarı mesajlarını mimari adıyla zenginleştirmesi gerektiğini belirtir. Bu seçenek, derleyici sürücüsü birden fazla -arch argümanıyla çağrıldığında derleyici sürücüsü tarafından kullanılır.
-twolevel_namespace_hints Karşı bağlama yapılan kütüphaneler değişmediği sürece dyld tarafından çalışma zamanı bağlamasını hızlandırmaya yardımcı olabilecek ipuçlarının ortaya çıkan ikili dosyaya eklenmesi gerektiğini belirtir.
-dot path Belirtilen yolda, sembol bağımlılıklarının bir grafiğini içeren bir dosya oluşturur. .dot dosyası GraphViz içinde görüntülenebilir.
-keep_relocs Nihai bağlanmış bir imaja kesim tabanlı yeniden konumlandırma (relocation) kayıtları ekler. Bu yeniden konumlandırmalar çalışma zamanında dyld tarafından yoksayılır.
-warn_stabs Derleyici bir BINCL/EINCL aralığı içine hatalı bir stab sembolü yerleştirdiği için bağlayıcı bir BINCL/EINCL optimizasyonu yapamadığında bir uyarı yazdırır.
-warn_commons Bir nesne dosyasında geçici bir tanım (tentative definition) bulunduğunda ve bağlı bir dylib'de aynı adda bir harici sembol de bulunduğunda bir uyarı yazdırır. Bu durum genellikle bir başlık dosyasındaki değişken bildiriminde "extern" anahtar kelimesinin eksik olduğu anlamına gelir.
-read_only_stubs [Yalnızca i386] Nihai bağlanmış bir imajın __IMPORT segmentini salt okunur yapar. Bu seçenek, i386 hızlı saplamalarındaki (fast stubs) JMP talimatlarının kötü niyetli kodlar tarafından kolayca üzerine yazılamaması açısından bir programı biraz daha güvenli hale getirir. Olumsuz yönü ise, dyld'nin saplamaları bağlarken segmenti geçici olarak yazılabilir hale getirmek için mprotect() kullanmak zorunda olmasıdır.
-slow_stubs [Yalnızca i386] Tek bir JMP talimatı saplaması kullanmak yerine bağlayıcı, __TEXT segmentinde, __DATA segmentindeki tembel (lazy) bir gösterici aracılığıyla çağrı yapan bir kod oluşturur.
-interposable_list filename Belirtilen filename, her zaman dolaylı olarak erişilmesi gereken global sembol adlarının bir listesini içerir. Örneğin, libSystem.dylib, _malloc araya girebilir (interposable) olacak şekilde bağlanmışsa, libSystem içinden yapılan malloc() çağrıları bir dyld saplamasından (stub) geçecek ve potansiyel olarak alternatif bir malloc'a yönlendirilebilecektir. libSystem.dylib, _malloc araya girebilir yapılmadan derlenmiş olsaydı, çalışma zamanında _malloc araya yerleştirildiğinde (interposed), libSystem içinden yapılan malloc çağrıları doğrudan çağrılar olacağı için kaçırılacaktır (araya yerleştirilmeyecektir).
-no_function_starts Varsayılan olarak bağlayıcı, nihai bağlanmış imajın LINKEDIT kısmında sıkıştırılmış bir fonksiyon başlangıç adresleri tablosu oluşturur. Bu seçenek bu davranışı devre dışı bırakır.
-no_objc_category_merging Varsayılan olarak, nihai bağlanmış imaj üretilirken bağlayıcı, bir sınıftaki tüm kategorileri o sınıfın içine birleştirerek Objective-C sınıflarını optimize edecektir. Optimizasyonun gerçekleşmesi için hem sınıfın hem de kategorilerinin bağlanan imaj içinde tanımlanmış olması gerekir. Bu seçeneğin kullanılması bu davranışı devre dışı bırakır.
-objc_relative_method_lists Varsayılan olarak, nihai bağlanmış imaj üretilirken, yeterince yeni bir işletim sistemi sürümü hedefleniyorsa, bağlayıcı geleneksel üç göstericili ObjC metot listelerini üç adet salt okunur delta göstericisi kullanacak şekilde yeniden yazacaktır. Bu seçenek, işletim sistemi sürümü çok düşük olsa bile göreli metot listelerinin kullanılmasını zorlamanıza olanak tanır.
-no_objc_relative_method_lists Varsayılan olarak, nihai bağlanmış imaj üretilirken, yeterince yeni bir işletim sistemi sürümü hedefleniyorsa, bağlayıcı geleneksel üç göstericili ObjC metot listelerini üç adet salt okunur delta göstericisi kullanacak şekilde yeniden yazacaktır. Bu seçenek, geleneksel üç göstericili metot listelerinin kullanılmasını zorlamanıza olanak tanır.
-object_path_lto filename Belirtilen filename, Bağlantı Zamanı Optimizasyonu (LTO) gerçekleştirirken geçici bir mach-o nesne dosyası gerektiğinde, bu seçenek kullanılırsa, geçici dosya belirtilen yolda saklanacak ve bağlama tamamlandıktan sonra da kalacaktır. Bu seçenek olmadan bağlayıcı bir yol seçer ve bağlayıcı aracı tamamlanmadan önce nesne dosyasını siler, bu nedenle hata ayıklayıcı veya dsymutil gibi araçlar geçici nesne dosyasındaki DWARF hata ayıklama bilgilerine erişemez.
-lto_library path Bağlantı Zamanı Optimizasyonu (LTO) gerçekleştirirken bağlayıcı normalde libLTO.dylib dosyasını bağlayıcı ikili dosyasına göreceli olarak (../lib/libLTO.dylib) yükler. Bu seçenek, kullanıcının bunun yerine yüklenecek belirli bir libLTO.dylib dosyasının yolunu belirtmesine olanak tanır.
-cache_path_lto path Artımlı Bağlantı Zamanı Optimizasyonu (LTO) gerçekleştirirken, artımlı yeniden derleme için bu dizini önbellek olarak kullanır.
-prune_interval_lto seconds Artımlı Bağlantı Zamanı Optimizasyonu (LTO) gerçekleştirirken, önbellek belirtilen aralıktan sonra budanacaktır (temizlenecektir). 0 değeri budamayı zorunlu kılacak, -1 değeri ise budamayı devre dışı bırakacaktır.
-prune_after_lto seconds Artımlı Bağlantı Zamanı Optimizasyonu (LTO) için önbellek budanırken, önbellek girdileri belirtilen aralıktan sonra kaldırılır.
-max_relative_cache_size_lto percent Artımlı Bağlantı Zamanı Optimizasyonu (LTO) gerçekleştirirken önbellek, boş alanın bu yüzdesini aşmayacak şekilde budanacaktır. Yani 100 değeri önbelleğin diski doldurabileceğini, 50 değeri ise önbellek boyutunun boş disk alanının yarısının altında tutulacağını gösterir.
-fixup_chains_section -pie kullanıldığında -static veya -preload ile kullanım içindir. Bağlayıcıya, gösterici biçimini ve her düzeltme zincirinin başlangıcına giden dosya ofsetlerini belirten bir dyld_chained_starts_offsets yapısıyla başlayan bir __TEXT,__chain_starts kesimi eklemesini söyler. Zincirlerdeki yeniden konumlandırma (rebase) hedefleri sanal bellek (vm) ofsetleridir.
-fixup_chains_section_vm -fixup_chains_section ile aynıdır ancak bir hatayı düzeltir. __chain_starts kesimindeki ofsetler, __TEXT segmentinden gelen vm ofsetleridir ve zincirlerdeki yeniden konumlandırma (rebase) hedefleri vm ofsetleridir.
-page_align_data_atoms Geliştirme sırasında bu seçenek, tüm global değişkenleri aralayarak her birinin ayrı bir sayfada yer almasını sağlamak için kullanılabilir. Bu, kirli (dirty) ve yerleşik (resident) sayfaları analiz ederken yararlıdır. Bu bilgi daha sonra, yaygın olarak kullanılan/kirli global değişkenleri aynı sayfalarda toplamak amacıyla bir order dosyası oluşturmak için kullanılabilir.
-not_for_dyld_shared_cache Normalde bağlayıcı, dylib'in dyld paylaşılan önbelleğine yerleştirilmesine izin veren, /usr/lib veya /System/Library/ ile başlayan -install_name değerine sahip dylib'lere ekstra bilgi ekleyecektir. Bu seçeneğin eklenmesi, bağlayıcıya bu ekstra bilgiyi eklememesini söyler.
-no_dynamic_access Çıktı dosyasını, dyld'nin onun dlopen() ile açılmasına (doğrudan) izin vermeyeceği ve dyld'nin dlsym() ile içinde hiçbir sembol bulamayacağı şekilde işaretler.
-search_in_sparse_frameworks Normal bir varyantı olmayan sürümlendirilmiş framework'lere karşı bağlama yaparken kullanım içindir. Varsayılan olarak -framework Foo,_suffix kullanıldığında bağlayıcı, sembolik bir bağlantı ise Foo.framework/Foo yolunu takip edecek, sonuna _suffix ekleyecek ve bu yoldaki bir dosyayı arayacaktır. Bu seçenek kullanıldığında, bağlayıcı ayrıca Foo.framework/Versions/Current/Foo_suffix yolunu da arayacaktır.
-ld_classic Bağlayıcı seçimini geçersiz kılar ve ikili dosyayı bağlamak için ld-classic kullanımını zorunlu kılar. Bu, kütüphaneleri derlemek/birleştirmek için kullanılan -merge* gibi seçeneklerle uyumsuzdur.
-ld_new Bağlayıcı seçimini geçersiz kılar ve ikili dosyayı bağlamak için ld kullanımını zorunlu kılar. Bu, armv7k ve i386 gibi daha eski mimarilerle uyumsuzdur.
Birleştirilebilir Kütüphane Seçenekleri (Mergeable Library Options) -make_mergeable Bir dylib'e, onu birleştirilebilir bir kütüphane haline getiren ek meta veriler ekler. Hala bir dylib olarak kullanılabilir veya diğer ikili dosyalar onu bir -merge* seçeneğiyle bağladığında onların içinde birleştirilebilir.
-merge-lx -lx seçeneği ile aynıdır ancak x kütüphanesinin içeriğini bu ikili dosyanın (binary) içinde birleştirmek anlamına gelir.
-merge_library path_to_library Bağlama satırında bir kütüphaneye giden dosya adı yolunu listelemekle aynıdır ancak kütüphanenin içeriğini bu ikili dosyanın içinde birleştirir.
-merge_framework name[,suffix] -framework name[,suffix] ile aynıdır ancak framework'ün içeriğinin bu ikili dosyanın içinde birleştirilmesi gerektiği anlamına gelir.
-no_merged_libraries_hook Birleştirilebilir kütüphaneler kullanıldığında ld, birleştirilebilir framework'lerden gelen bundle kaynak aramalarını birleştirilmiş ikili dosyaya yönlendirmek için otomatik olarak bir kanca (hook) ekler. Bu kancayı devre dışı bırakmak için bu seçeneği kullanın.
Kanca minimum iOS 12 dağıtım sürümü gerektirir; framework'leriniz bundle kaynak aramaları gerektirmiyorsa, daha düşük bir dağıtım hedefiyle kancayı devre dışı bırakmak için bu seçeneği kullanabilirsiniz. Kancayı devre dışı bırakmak, başlatma süresi performansını da iyileştirebilir; bu nedenle gerekli değilse dağıtım hedefinden bağımsız olarak devre dışı bırakmak iyidir.
-add_mergeable_debug_hook Özel/dahili sınıflara dayalı bundle kaynak aramalarını yönlendirmek üzere bir kanca eklemek için, birleştirilebilir kütüphanelerin hata ayıklama (debug) derlemelerinde bu seçeneği kullanın.
Artık Kullanılmayan Seçenekler (Obsolete Options) -segalign value Tüm segmentler sayfa hizalı (page aligned) olmalıdır.
-seglinkedit LINKEDIT segmentine sahip nesne dosyaları (MH_OBJECT) artık desteklenmemektedir. Bu seçenek artık kullanılmamaktadır (obsolete).
-noseglinkedit Bu varsayılandır. Bu seçenek artık kullanılmamaktadır.
-fvmlib Sabit VM paylaşılan kütüphaneleri (MH_FVMLIB) artık desteklenmemektedir. Bu seçenek artık kullanılmamaktadır.
-sectobjectsymbols segname sectname Bir kesim başlangıcına yerel etiket (local label) eklenmesi artık desteklenmemektedir. Bu seçenek artık kullanılmamaktadır.
-nofixprebinding mach_headers yapılarındaki MH_NOFIXPREBINDING biti, Mac OS X 10.3.9'dan beri yoksayılmaktadır. Bu seçenek artık kullanılmamaktadır.
-noprebind_all_twolevel_modules Dinamik kütüphanelerdeki çoklu modüller (multi-modules), Mac OS X 10.4.0'dan beri çalışma zamanında yoksayılmaktadır. Bu seçenek artık kullanılmamaktadır.
-prebind_all_twolevel_modules Dinamik kütüphanelerdeki çoklu modüller, Mac OS X 10.4.0'dan beri çalışma zamanında yoksayılmaktadır. Bu seçenek artık kullanılmamaktadır.
-prebind_allow_overlap -prebind kullanıldığında bağlayıcı varsayılan olarak çakışmaya izin verir, bu nedenle bu seçenek artık kullanılmamaktadır.
-noprebind LD_PREBIND artık önceden bağlamayı zorlamanın bir yolu olarak desteklenmemektedir, bu nedenle artık LD_PREBIND değerini geçersiz kılacak bir komut satırı yoluna gerek yoktur. Bu seçenek artık kullanılmamaktadır.
-sect_diff_relocs treatment Bu seçenek, -mdynamic-no-pic olmadan derlenmiş .o dosyalarının bir ana yürütülebilir dosyaya bağlanması konusunda uyarıda bulunma girişimiydi, ancak hatalı pozitif (false positive) oranı seçeneğin yararlı olmasını engelleyecek kadar çok gürültü oluşturdu. Bu seçenek artık kullanılmamaktadır.
-run_init_lazily Bu seçenek Mac OS X 10.2'de kaldırılmıştır.
-single_module Bu artık varsayılandır, bu nedenle belirtilmesine gerek yoktur.
-multi_module Dinamik kütüphanelerdeki çoklu modüller, Mac OS X 10.4.0'dan beri çalışma zamanında yoksayılmaktadır. Bu seçenek artık kullanılmamaktadır.
-no_dead_strip_inits_and_terms Bağlayıcı başlatma ve sonlandırma rutinlerini asla ölü kod temizlemesine (dead strip) tabi tutmaz. Bunlar, ölü kod temizleme grafiğinin "kökleri" (roots) olarak kabul edilir.
-A basefile Eski artımlı yükleme (incremental load) biçimi. Bu seçenek artık kullanılmamaktadır.
-b Temel dosyanın sembollerini temizlemek için -A seçeneği ile birlikte kullanılırdı. Bu seçenek artık kullanılmamaktadır. Yükleme haritası (load map) üretmek için kullanılan eski seçenek. Bunun yerine -map seçeneğini kullanın.
-Sn Hiçbir sembolü temizlemez. Bu varsayılandır. Bu seçenek artık kullanılmamaktadır.
-Si Yinelenenleri kaldırmak için stabs hata ayıklama sembollerini optimize eder. Bu varsayılandır. Bu seçenek artık kullanılmamaktadır.
-Sp Hata ayıklayıcının (debugger) tam stabs sembolleri için orijinal .o dosyasını açıp okumasına neden olan minimal stabs sembolleri yazar. Bu hata ayıklama stili Mac OS X 10.5'te artık kullanılmamaktadır. Bu seçenek artık kullanılmamaktadır.
-X 'L' ile başlayan yerel sembolleri temizler. Bu varsayılandır. Bu seçenek artık kullanılmamaktadır.
-s Sembol tablosunun kaldırılması da dahil olmak üzere çıktıyı tamamen temizler. Bu dosya biçimi varyantı artık desteklenmemektedir. Bu seçenek artık kullanılmamaktadır.
-m Birden fazla tanımı bir hata olarak ele almaz. Bu artık desteklenmemektedir. Bu seçenek artık kullanılmamaktadır.
-ysymbol Sembolün kullanıldığı her dosyayı görüntüler. Bu daha önce tanımlanmamış bir sembolün nerede kullanıldığını ayıklamak için kullanılırdı, ancak bağlayıcı artık tüm kullanımları otomatik olarak yazdırmaktadır. -why_live seçeneği, bir sembolün ölü kod temizliğine (dead strip) maruz kalmasını neyin engellediğini görüntülemek için de kullanılabilir. Bu seçenek artık kullanılmamaktadır.
-Y number -y ile belirtilen her bir sembolün kaç adet örneğinin gösterileceğini kontrol etmek için kullanılırdı. Bu seçenek artık kullanılmamaktadır.
-nomultidefs Yalnızca bir umbrella framework bağlanırken kullanılır. mach_header yapısında MH_NOMULTIDEFS bitini ayarlar. MH_NOMULTIDEFS biti Mac OS X 10.4'ten beri artık kullanılmamaktadır. Bu seçenek artık kullanılmamaktadır.
-multiply_defined_unused treatment Önceden, çıktı dosyasındaki sembol tanımlarından herhangi biri karşı bağlama yapılan dinamik kütüphanedeki tanımlarla eşleştiğinde uyarı verme veya hata verme yolu sağlardı. Bu seçenek artık kullanılmamaktadır.
-multiply_defined treatment Önceden, dinamik bir kütüphaneden kullanılan sembollerden herhangi biri bağlı başka bir dinamik kütüphanede de mevcut olduğunda uyarı verme veya hata verme yolu sağlardı. Bu seçenek artık kullanılmamaktadır.
-private_bundle Önceden -flat_namespace, -bundle ve -bundle_loader kullanıldığında ve demet, ana yürütülebilir dosyadaki bir sembolle çakışan bir tanım içerdiğinde hataları önlerdi. Bağlayıcı artık bu tür çakışmalarda hata vermemektedir. Bu seçenek artık kullanılmamaktadır.
-noall_load Bu varsayılandır. Bu seçenek artık kullanılmamaktadır.
-seg_addr_table_filename path seg_addr_table tablosundaki bir girdiyle eşleştirmek için kütüphanenin yükleme adı (install name) yerine path yolunu kullanır. Bu seçenek artık kullanılmamaktadır.
-sectorder segname sectname orderfile Daha genel olan -order_file seçeneği ile değiştirilmiştir.
-sectorder_detail Sectorder girdilerinden hangilerinin kullanıldığı hakkında ekstra günlük kaydı (log) üretirdi. -order_file_statistics ile değiştirilmiştir. Bu seçenek artık kullanılmamaktadır.
-poison_symbol symbolName Belirtilen sembolün herhangi bir şekilde kullanılmasının hata olmasına neden olur. Belirli bir API'yi kullanmadığınızdan emin olmak için yararlıdır.
-poison_symbols_list filePath Belirtilen filePath, zehirlenecek (kullanılması hata sayılacak) sembol adlarının bir listesini içerir.
Ayrıca Bakınız (See Also)
ld-classic(1), ld-layout-file(1), as(1), ar(1), cc(1), dyld_info(1), nm(1), otool(1) lipo(1), arch(3), dyld(3), Mach-O(5), strip(1), rebase(1)
Darwin Haziran 21, 2023 Darwin