Linux / Unix Komutu: Kimliği

ADI

ld - LD'yi kullanarak , GNU bağlayıcı

ÖZET

ld [ seçenekler ] objfile ...

AÇIKLAMA

ld , bir dizi nesneyi ve arşiv dosyalarını birleştirir, verilerini yeniden konumlandırır ve sembol referanslarını bağlar. Genellikle bir programın derlenmesinde son adım, ld'yi çalıştırmaktır.

ld , linkleme işlemi üzerinde açık ve tam kontrol sağlamak için AT & T'nin Link Editor Komut Dili sözdiziminin bir üst satırında yazılmış Bağlayıcı Komutu Dil dosyalarını kabul eder.

Bu adam sayfası komut dilini açıklamıyor; Komut dili ve GNU bağlayıcısının diğer yönleri ile ilgili tüm ayrıntılar için ld girişini "info" ya da manuel ld: GNU linker 'e bakın.

Ld'nin bu sürümü, nesne dosyalarında çalışmak için genel amaçlı BFD kütüphanelerini kullanır. Bu, ld'nin nesne dosyalarını birçok farklı biçimde (örneğin, COFF veya "a.out") okumasına, birleştirmesine ve yazmasına izin verir. Herhangi bir kullanılabilir nesne dosyası üretmek için farklı formatlar birbirine bağlanabilir.

Esnekliğinin yanı sıra, GNU bağlayıcı, tanılama bilgilerini sağlamada diğer bağlayıcılardan daha yararlıdır. Birçok bağlayıcı, bir hatayla karşılaştıktan hemen sonra yürütmeyi durdurur; Mümkün olduğunda, diğer hataları tanımlamanıza (veya bazı durumlarda hataya rağmen bir çıktı dosyası almanıza) izin vererek, ld çalışmaya devam eder.

GNU linker ld'nin geniş bir yelpazeyi kapsadığı ve diğer linkerlerle olabildiğince uyumlu olduğu kastedilmektedir. Sonuç olarak, davranışlarını kontrol etmek için birçok seçeneğiniz vardır.

SEÇENEKLER

Linker çok sayıda komut satırı seçeneğini desteklemektedir , ancak gerçek uygulamada bunların hiçbiri belirli bir bağlamda kullanılmamaktadır. Örneğin, sık kullanılan ld , standart Unix nesne dosyalarını standart, desteklenen bir Unix sistemine bağlamaktır. Böyle bir sistemde, bir "hello.o" dosyasını bağlamak için:

ld -o <çıkış> /lib/crt0.o merhaba.o -lc

Bu, "merhaba.o" ile "/lib/crt0.o" dosyasını ve standart arama dizinlerinden gelen "libc.a" kütüphanesini bağlamanın sonucu olarak çıktı olarak adlandırılan bir dosya üretmesini söyler. (Aşağıdaki -l seçeneği tartışmasına bakın.)

Komut satırı seçeneklerinden bazıları, komut satırındaki herhangi bir noktada belirtilebilir. Ancak, -l veya -T gibi dosyalara başvuran seçenekler, dosyanın, komut dosyalarında, nesne dosyalarına ve diğer dosya seçeneklerine göre göründüğü noktada okunmasına neden olur. Farklı bir argümanla dosya dışı seçeneklerin tekrarlanması ya başka bir etkiye sahip olmayacak ya da bu seçeneğin önceliklerini (komut satırında solda olacak şekilde) geçersiz kılacaktır. Birden fazla anlamlı bir şekilde belirtilen seçenekler aşağıdaki açıklamalarda belirtilmiştir.

Seçenek olmayan argümanlar, birbirine bağlanacak nesne dosyaları veya arşivlerdir. Bir nesne dosyası argümanı bir seçenek ve onun argümanı arasına yerleştirilemeyeceği durumlar hariç, komut satırı seçenekleriyle takip edebilir, önceden gelebilir veya kombine edilebilir.

Genellikle bağlayıcı en az bir nesne dosyası ile çağrılır, ancak -l , -R ve komut dosyası komut dilini kullanarak diğer ikili giriş dosya biçimlerini belirtebilirsiniz. Hiçbir ikili giriş dosyası belirtilmemişse, bağlayıcı herhangi bir çıktı üretmez ve No giriş dosyası iletir .

Bağlayıcı bir nesne dosyasının biçimini tanıyamazsa, bunun bir bağlayıcı betik olduğunu varsayar. Bu şekilde belirtilen bir betik, bağlantı için kullanılan ana bağlayıcı komut dosyasını (varsayılan bağlayıcı komut dosyası veya -T kullanılarak belirtilen satırı ) artırır. Bu özellik, bağlayıcının bir nesne veya bir arşiv gibi görünen bir dosyaya bağlanmasına izin verir, ancak aslında bazı sembol değerlerini tanımlar veya başka nesneleri yüklemek için "GİRİŞ" veya "GRUP" kullanır. Bu şekilde bir komut dosyası belirtmenin yalnızca ana bağlayıcı komut dosyasını artırdığını unutmayın; Varsayılan bağlayıcı betiğini tamamen değiştirmek için -T seçeneğini kullanın.

Adları tek bir harf olan seçenekler için, seçenek argümanları, seçenek harfini boşluk ara vermeksizin izlemelidir ya da bunları gerektiren seçeneği takip eden ayrı argümanlar olarak belirtilmelidir.

İsimleri birden çok harf olan seçenekler için, seçenek adından önce bir tire işareti veya ikisi de olabilir; örneğin, -trace-symbol ve --trace-symbol eşdeğerdir. Not - Bu kuralın bir istisnası vardır. 'O' küçük harfiyle başlayan çoklu harf seçenekleri yalnızca iki tire ile yapılabilir. Bu, -o seçeneği ile karışıklığı azaltmaktır. Örneğin, -omagic çıktı dosya ismini büyüye ayarlar, oysa --omagic çıkıştaki NMAGIC bayrağını ayarlar.

Birden çok harfli seçeneklere yönelik argümanlar, seçenek adından eşittir işareti ile ayrılmalıdır ya da bunları gerektiren seçeneği hemen takip eden ayrı bağımsız değişkenler olarak belirtilmelidir. Örneğin, --trace-sembolü foo ve --trace-symbol = foo eşdeğerdir. Çok harfli seçeneklerin adlarının benzersiz kısaltmaları kabul edilir.

Not - linker bir derleyici sürücüsü (örneğin gcc ) aracılığıyla dolaylı olarak çağrılırsa, o zaman tüm linker komut satırı seçenekleri -Wl, (veya belirli bir derleyici sürücüsü için uygun olan her şey) tarafından önekli olmalıdır.

gcc -Wl, - başlangıç ​​grubu foo.o bar.o -Wl, - end grubu

Bu önemlidir, çünkü aksi takdirde derleyici sürücü programı linker seçeneklerini sessizce bırakabilir ve bu da kötü bir bağlantıya neden olabilir.

Burada GNU linker tarafından kabul edilen genel komut satırı anahtarlarının bir tablosu:

-bir anahtar kelime

Bu seçenek HP / UX uyumluluğu için desteklenir. Anahtar kelime argümanı, dizeler arşivi , paylaşımlı veya varsayılan dizelerden biri olmalıdır. -archive işlevsel olarak -Bstatic eşdeğer ve diğer iki anahtar kelime işlevsel olarak -Bdynamic eşdeğerdir. Bu seçenek herhangi bir sayıda kullanılabilir.

- Bir mimari

- mimarlık = mimari

Ld'nin mevcut sürümünde, bu seçenek sadece Intel 960 mimarisi ailesi için kullanışlıdır. Bu ld yapılandırmasında, mimari argüman 960 ailesindeki belirli mimariyi tanımlar ve bazı arşivleme ve arşiv kütüphanesi arama yolunu değiştirir.

Ld'nin gelecekteki sürümleri diğer mimarlık aileleri için benzer işlevleri destekleyebilir.

-b giriş formatı

--format = giriş biçimi

ld , birden fazla türde nesne dosyasını destekleyecek şekilde yapılandırılabilir. Ld'niz bu şekilde yapılandırılmışsa, komut satırında bu seçeneği takip eden giriş nesnesi dosyaları için ikili formatı belirtmek için -b seçeneğini kullanabilirsiniz. Ld , alternatif nesne formatlarını destekleyecek şekilde yapılandırılmış olsa bile, genellikle bunu belirtmenize gerek yoktur, çünkü her makine için varsayılan giriş formatı olarak varsayılan girdi formatı olarak beklendiği şekilde yapılandırılmalıdır. giriş formatı , BFD kütüphaneleri tarafından desteklenen belirli bir formatın adı olan bir metin dizesidir. (Kullanılabilir ikili formatları objdump -i ile listeleyebilirsiniz .)

Dosyaları olağandışı bir ikili formatla birbirine bağlarsanız, bu seçeneği kullanmak isteyebilirsiniz. Belirli bir biçimde her bir nesne dosyası grubundan önce -b giriş biçimini dahil ederek, formatları açıkça değiştirmek için (farklı biçimlerde nesne dosyalarını bağlarken) -b kullanabilirsiniz .

Varsayılan format "GNUTARGET" ortam değişkeninden alınmıştır.

Giriş formatını "TARGET" komutunu kullanarak bir komut dosyasından da tanımlayabilirsiniz;

-c MRI-komut dosyası

--mri-script = MRI- komut dosyası

MRI tarafından üretilen bağlayıcılarla uyumluluk için, ld , GNU belgelerinin MRI Uyumlu Komut Dosyası Dosyaları bölümünde açıklanan alternatif, sınırlı bir komut dilinde yazılmış komut dosyalarını kabul eder. MRI komut dosyalarını -c ; Genel amaçlı ld betik dilinde yazılmış linker betiklerini çalıştırmak için -T seçeneğini kullanın. MRI-cmdfile yoksa, ld herhangi bir L seçeneği ile belirtilen dizinlerde arar.

-d

-dc

-dp

Bu üç seçenek eşdeğerdir; Diğer linkerlerle uyumluluk için çoklu formlar desteklenir. Yeniden yüklenebilir bir çıktı dosyası belirtilse bile ( -r ile ) ortak sembollere alan atarlar. "FORCE_COMMON_ALLOCATION" komut dosyası komutu aynı etkiye sahiptir.

-e giriş

--entry = giriş

Varsayılan giriş noktasından ziyade, programınızı yürütmeye başlamak için açık sembol olarak girişi kullanın. Giriş adı verilen bir sembol yoksa, bağlayıcı bir sayı olarak girişi ayrıştırmaya çalışacaktır ve bunu giriş adresi olarak kullanacaktır (sayı 10 tabanında yorumlanacaktır; temel 16 için bir başlangıç 0x veya önde gelen bir 0 olabilir. taban 8).

-E

--export-dinamik

Dinamik olarak bağlantılı bir yürütülebilir dosya oluştururken, tüm sembolleri dinamik sembol tablosuna ekleyin. Dinamik sembol tablosu, çalışma zamanında dinamik nesnelerden görülebilen semboller kümesidir.

Bu seçeneği kullanmazsanız, dinamik simge tablosu normalde yalnızca bağlantıda belirtilen bazı dinamik nesneler tarafından başvurulan sembolleri içerir.

Başka bir dinamik nesne yerine, program tarafından tanımlanan simgelere geri başvurması gereken dinamik bir nesneyi yüklemek için "dlopen" kullanırsanız, muhtemelen programın kendisini bağlarken bu seçeneği kullanmanız gerekecektir.

Çıkış formatı destekliyorsa dinamik sembol tablosuna hangi sembollerin ekleneceğini kontrol etmek için sürüm komut dosyasını da kullanabilirsiniz. @ Ref {VERSION} içinde --version-script dosyasının açıklamasına bakın.

-EB

Büyük endian nesneleri birbirine bağlayın. Bu, varsayılan çıkış formatını etkiler.

-EL

Küçük endian nesneleri bağlayın. Bu, varsayılan çıkış formatını etkiler.

-f

- yardımcı isim

ELF paylaşılan bir nesne oluştururken, iç DT_AUXILIARY alanını belirtilen ada göre ayarlayın. Bu, dinamik bağlayıcının, paylaşılan nesnenin sembol tablosunun, paylaşılan nesne adının sembol tablosunda bir yardımcı filtre olarak kullanılmasını söyler.

Daha sonra bu filtre nesnesine karşı bir program bağlarsanız, programı çalıştırdığınızda, dinamik bağlayıcı DT_AUXILIARY alanını görecektir. Dinamik bağlayıcı, filtre nesnesinden herhangi bir sembolü çözerse, önce paylaşılan nesne adında bir tanım olup olmadığını kontrol eder. Varsa, filtre nesnesindeki tanım yerine kullanılır. Paylaşılan nesne adı mevcut değil. Böylece paylaşılan nesne adı , belki de hata ayıklama ya da makineye özgü performans için, belirli fonksiyonların alternatif bir uygulamasını sağlamak için kullanılabilir.

Bu seçenek bir kereden fazla belirtilebilir. DT_AUXILIARY girişleri komut satırında göründükleri sırayla oluşturulacaktır.

-F ismi

--filtre adı

ELF paylaşılan bir nesne oluştururken, iç DT_FILTER alanını belirtilen ada göre ayarlayın. Bu, dinamik bağlantıya, paylaşılan nesnenin sembol tablosunun, paylaşılan nesne adının sembol tablosunda bir filtre olarak kullanılmasını söyler.

Daha sonra bu filtre nesnesine karşı bir program bağlarsanız, programı çalıştırdığınızda, dinamik bağlayıcı DT_FILTER alanını görecektir. Dinamik bağlayıcı, filtre nesnesinin sembol tablosuna göre sembolleri her zamanki gibi çözer, ancak aslında paylaşılan nesne adında bulunan tanımlara bağlanır. Böylece filtre nesnesi, nesne adı tarafından sağlanan sembollerin bir alt setini seçmek için kullanılabilir.

Bazı eski bağlayıcılar, hem giriş hem de çıktı nesne dosyaları için nesne dosya formatı belirlemek için bir derleme araç zinciri boyunca -F seçeneğini kullandı. GNU linker, bu amaçla başka mekanizmalar kullanır: -b , --format , --oformat seçenekleri, linker betiklerinde "TARGET" komutu ve "GNUTARGET" ortam değişkeni. Bir ELF paylaşımlı nesne oluşturulmadığında, GNU bağlayıcı -F seçeneğini görmezden gelecektir.

-fini adı

ELF yürütülebilir veya paylaşılan nesne oluştururken, DT_FINI işlevinin adresine ayarlanarak, yürütülebilir veya paylaşılan nesne kaldırıldığında NAME öğesini çağırın. Varsayılan olarak, bağlayıcı, çağrılacak işlev olarak "_fini" kullanır.

-g

Yok Sayılan. Diğer araçlarla uyumluluk için sağlanmıştır.

-G değeri

--gpsize = değer

GP kaydı kullanılarak boyutlandırılacak nesnelerin maksimum boyutunu ayarlayın. Bu sadece büyük ve küçük nesneleri farklı bölümlere yerleştirmeyi destekleyen MIPS ECOFF gibi nesne dosya formatları için anlamlıdır. Bu, diğer nesne dosya formatları için yok sayılır.

-h isim

-soname = isim

ELF paylaşılan bir nesne oluştururken, iç DT_SONAME alanını belirtilen ada göre ayarlayın. Bir yürütülebilir dosya, bir DT_SONAME alanı olan bir paylaşılan nesneye bağlandığında, yürütülebilir dosya çalıştırıldığında dinamik bağlayıcı, bağlayıcıya verilen dosya adını kullanmak yerine DT_SONAME alanı tarafından belirtilen paylaşılan nesneyi yüklemeye çalışır.

-ben

Artımlı bir bağlantı gerçekleştir (seçenek olarak -r ile aynı).

-init adı

ELF yürütülebilir veya paylaşılan nesne oluştururken, yürütülebilir dosyanın veya paylaşılan nesne yüklendiğinde, işlevin adresine DT_INIT ayarlanarak NAME öğesini çağırın. Varsayılan olarak, bağlayıcı, çağrılacak işlev olarak "_init" kullanır.

-l arşivi

--library = arşiv

Bağlanacak dosyalar listesine arşiv dosyası arşivi ekleyin. Bu seçenek herhangi bir sayıda kullanılabilir. ld belirtilen her arşiv için "libarchive.a" oluşumları için yol listesini araştıracaktır.

Paylaşılan kütüphaneleri destekleyen sistemlerde, ld ayrıca ".a" dışındaki uzantıları olan kütüphaneleri de arayabilir. Özellikle, ELF ve SunOS sistemlerinde, ld , ".a" uzantılı bir uzantı aramadan önce ".so" uzantılı bir kütüphane için bir dizin arayacaktır. Sözleşmeye göre, bir ".so" uzantısı paylaşılan bir kitaplığı gösterir.

Linker, komut satırında belirtildiği yerde bir arşivi yalnızca bir kez arayacaktır. Arşiv, komut satırındaki arşivden önce görünen bazı nesnelerde tanımlanmamış bir sembolü tanımlarsa, bağlayıcı, uygun dosyaları arşivden içerecektir. Ancak, daha sonra komut satırında görünen bir nesnede tanımlanmamış bir sembol, bağlayıcının arşivi tekrar aramasına neden olmaz.

Bkz. - ( bağlayıcıyı arama arşivlerine birden çok kez zorlamak için bir seçenek).

Aynı arşivi komut satırında birden çok kez listeleyebilirsiniz.

Bu tür arşiv araması, Unix bağlayıcıları için standarttır. Ancak, onAIX üzerinde kullanıyorsanız, bunun AIX bağlayıcısının davranışından farklı olduğunu unutmayın.

-L arama

--library-path = searchdir

Arşiv kitaplıklarını ve ld denetim komut dosyalarını arayacak olan yolların listesine yol arama yolu ekleyin . Bu seçeneği istediğiniz sayıda kullanabilirsiniz. Dizinler, komut satırında belirtildikleri sırayla aranır. Komut satırında belirtilen dizinler, varsayılan dizinlerden önce aranır. Tüm -L seçenekleri, seçeneklerin görünme sırasına bakılmaksızın tüm -l seçenekleri için geçerlidir.

Searchdir "=" ile başlarsa , "=" linker yapılandırıldığında belirtilen bir yol olan sysroot öneki ile değiştirilir.

Aranan varsayılan yollar kümesi ( -L ile belirtilmeden), hangi öykünme modunun kullandığını ve bazı durumlarda da nasıl yapılandırıldığına bağlıdır.

Yollar "SEARCH_DIR" komutu ile bir link betiğinde de belirtilebilir. Bu şekilde belirtilen dizinler, linker betiğinin komut satırında görüldüğü noktada aranır.

-m öykünmesi

Emülasyon bağlayıcıyı öykün. Mevcut emulasyonları --verbose veya -V seçenekleriyle listeleyebilirsiniz.

-m seçeneği kullanılmazsa, bu tanımlanırsa öykünme "LDEMULATION" ortam değişkeninden alınır.

Aksi takdirde, varsayılan öykünme, bağlayıcının nasıl yapılandırıldığına bağlıdır.

-M

print-haritası

Standart çıktıya bir bağlantı haritası yazdırın. Bir bağlantı haritası, aşağıdakiler dahil olmak üzere bağlantı hakkında bilgi sağlar:

*

Nesne dosyaları ve semboller belleğe eşlendiğinde.

*

Genel semboller nasıl tahsis edilir.

*

Arşiv içerisindeki tüm arşiv üyeleri, arşiv üyesine getirilecek olan sembolden bahsetmişlerdir.

-n

--nmagic

Bölümlerin sayfa hizalamasını kapatın ve mümkünse çıktıyı "NMAGIC" olarak işaretleyin.

-N

--omagic

Okunabilir ve yazılabilir metin ve veri bölümlerini ayarlayın. Ayrıca, veri segmentini sayfa hizalamayın ve paylaşılan kitaplıklara karşı bağlantıyı devre dışı bırakın. Çıkış formatı Unix stili sihirli sayıları destekliyorsa, çıkışı "OMAGIC" olarak işaretleyin.

no-omagic

Bu seçenek -N seçeneğinin etkilerinin çoğunu geçersiz kılar. Okunacak metin bölümünü ayarlar ve veri segmentini sayfa hizalamaya zorlar. Not - Bu seçenek, paylaşılan kitaplıklara bağlanmayı etkinleştirmez. Bunun için -Bdynamic kullanın.

-o çıktı

- çıkış = çıkış

Ld tarafından üretilen programın adı olarak çıktı kullanın; Bu seçenek belirtilmemişse, a.out ismi varsayılan olarak kullanılır. Komut dosyası "OUTPUT" da çıkış dosya adını belirtebilir.

-O seviyesi

Seviye sıfır ld'den büyük bir sayısal değer ise, çıktıyı optimize eder. Bu, önemli ölçüde daha uzun sürebilir ve bu nedenle muhtemelen yalnızca son ikili için etkinleştirilmelidir.

-q

-relocs --emit

Yer değiştirme bölümlerini ve içeriklerini tam bağlantılı yürütücülere bırakın. Post link analizi ve optimizasyon araçları, çalıştırılabilirlerin doğru modifikasyonlarını yapmak için bu bilgilere ihtiyaç duyabilir. Bu daha büyük yürütülebilirler ile sonuçlanır.

Bu seçenek şu anda yalnızca ELF platformlarında desteklenmektedir.

-r

--relocateable

Yeniden yüklenebilir çıktı üretin, yani, sırayla ld'ye girdi olarak kullanılabilen bir çıktı dosyası oluşturun. Bu genellikle kısmi bağlantı olarak adlandırılır. Bir yan etki olarak, standart Unix sihirli numaralarını destekleyen ortamlarda, bu seçenek de çıktı dosyasının sihirli numarasını "OMAGIC" olarak ayarlar. Bu seçenek belirtilmemişse, mutlak bir dosya üretilir. C ++ programlarını bağlarken, bu seçenek kuruculara yapılan referansları çözmeyecektir; Bunu yapmak için -Ur kullanın.

Bir girdi dosyası çıktı dosyasıyla aynı biçime sahip olmadığında, kısmi bağlantı sadece bu girdi dosyası herhangi bir yer değiştirme içermiyorsa desteklenir. Farklı çıktı formatları daha fazla kısıtlamaya sahip olabilir; örneğin, bazı "a.out" tabanlı formatlar giriş dosyaları ile diğer formatlardaki kısmi bağlantıyı desteklemez.

Bu seçenek -i ile aynı şeyi yapar.

-R dosya adı

--just-symbols = dosya adı

Sembol adlarını ve adreslerini dosya adından okuyun, ancak yeniden yerleştirmeyin veya çıktıya dahil etmeyin. Bu, çıktı dosyanızın diğer programlarda tanımlanan mutlak bellek yerlerine sembolik olarak başvurmasını sağlar. Bu seçeneği bir defadan fazla kullanabilirsiniz.

Diğer ELF bağlayıcılarıyla uyumluluk için, -R seçeneğine bir dosya adı yerine bir dizin adı gelirse , -rpath seçeneği olarak kabul edilir.

-s

--strip-all

Tüm sembol bilgilerini çıktı dosyasından çıkarın.

-S

--strip-ayıklama

Çıktı dosyasından hata ayıklayıcı sembol bilgisini (tüm sembolleri değil) atlayın.

-t

--trace

Giriş dosyalarının isimlerini, ld onları işledikçe yazdırın.

-T komut dosyası dosyası

--script = komut dosyası dosyası

Linker komut dosyası olarak script dosyası kullanın. Bu betik, ld 'nin varsayılan bağlayıcı betiğinin yerini alır (buna eklemek yerine), bu yüzden komut dosyası çıktı dosyasını tanımlamak için gerekli olan her şeyi belirtmelidir. Geçerli dizinde script dosyası yoksa, "ld" herhangi bir önceki -L seçeneklerinde belirtilen dizinlerde arar. Çoklu- T seçenekleri birikir.

-u sembol

--undefined = sembol

Çıkış dosyasına, tanımlanmamış bir sembol olarak girilecek kuvvet simgesi. Bunu yapmak, örneğin, standart modüllerden ek modüllerin bağlanmasını tetikleyebilir. Ek tanımlanmamış semboller girmek için farklı seçenek argümanlarıyla tekrar edilebilir. Bu seçenek "EXTERN" linker komutuna eşdeğerdir.

-ur

C ++ programlarından başka herhangi bir şey için, bu seçenek -r'ye eşdeğerdir: yeniden yüklenebilir çıktı üretir; yani, ld'ye girdi olarak işlev görebilen bir çıktı dosyası. C ++ programlarını bağlarken -r , -r'den farklı olarak, kurucular için referansları çözer. -Ur ile bağlantılı olan dosyalarda -Ur kullanmak için işe yaramıyor ; yapıcı tablosu oluşturulduktan sonra, eklenemez. Kullanım - Sadece son kısmi bağlantı için kullanın ve diğerleri için -r .

--unique [= SECTION ]

SECTION ile eşleşen her giriş bölümü için ayrı bir çıkış bölümü veya her yetim giriş bölümü için isteğe bağlı joker SECTION bağımsız değişkeni eksikse. Bir yetim bölümü, bir bağlayıcı komut dosyasında özellikle belirtilmeyen bir bölümdür. Bu seçeneği komut satırında birden çok kez kullanabilirsiniz; Bir linker komut dosyasında çıktı bölüm atamaları ile aynı adla giriş bölümlerinin normal birleşmesini engeller.

-v

version

-V

Ld için sürüm numarasını görüntüleyin. -V seçeneği de desteklenen emülasyonları listeler.

-x

--Hepsini at

Tüm yerel sembolleri silin.

-X

--discard-halk

Tüm geçici yerel sembolleri silin. Çoğu hedef için bu, adları L ile başlayan tüm yerel sembollerdir.

-y sembolü

--trace-symbol = sembol

Sembolün göründüğü her bağlantılı dosyanın adını yazdırın. Bu seçenek herhangi bir sayıda verilebilir. Birçok sistemde alt çizgi basmak gereklidir.

Bu seçenek, bağlantınızdaki tanımsız bir simgeye sahip olduğunuzda ancak referansın nereden geldiğini bilmediğinizde kullanışlıdır.

-Y yolu

Varsayılan kütüphane arama yoluna yol ekleyin. Bu seçenek Solaris uyumluluğu için mevcuttur.

-z anahtar kelime

Tanınan anahtar kelimeler "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" ve "nocopyreloc" şeklindedir. ". Solaris uyumluluğu için diğer anahtar kelimeler göz ardı edilir. "initfirst", başka herhangi bir nesneden önce çalışma zamanında ilk başta başlatılacak nesneyi işaretler. "interpose", sembol tablosunun, tüm sembollerden önce, ancak birincil çalıştırıcıdan önce işaret ettiği nesneyi işaretler. "loadfltr", dosyalarının çalışma zamanında hemen işlenmesini sağlayan nesneyi işaretler. "nodefaultlib", bu nesnenin bağımlılıklarının yok sayılacağı nesnesini işaretler. herhangi bir varsayılan kütüphane arama yolu. "nodelete", nesnenin çalışma zamanında kaldırılmaması gerektiğini belirtir. "nodlopen", "dlopen" için mevcut olmayan nesneyi işaretler. "nodump" işareti, nesnenin "dldump" tarafından boşaltılamamasına işaret eder. "şimdi", tembel olmayan çalışma zamanı bağlamasının bulunduğu nesneyi işaretler. "kökeni", nesnenin $ ORIGIN içerebileceğini belirtir. "defs" undefined sembollerine izin vermez. "muldefs" çoklu tanımlara izin verir. "combreloc" birden fazla reloc bölümünü birleştirir ve onları dinamik sembol arama önbelleğini mümkün kılmak için sıralar.

"nocombreloc", çoklu reloc bölümlerini birleştirmeyi devre dışı bırakır. "nocopyreloc", kopya reloklarının üretimini devre dışı bırakır.

- ( arşivler -)

- başlangıç ​​grubu arşivleri - grup grubu

Arşivler arşiv dosyalarının bir listesi olmalıdır. Açık dosya adları veya -l seçenekleri olabilirler.

Belirtilen arşivler, yeni tanımlanmamış referanslar oluşturuluncaya kadar art arda aranır. Normalde, bir arşiv, komut satırında belirtildiği sırayla yalnızca bir kez aranır. Bu arşivdeki bir simge, daha sonra komut satırında görünen bir arşivdeki bir nesne tarafından atıfta bulunulan tanımsız bir sembolü çözmek için gerekliyse, bağlayıcı bu referansı çözümleyemeyebilir. Arşivleri gruplandırarak, tüm olası referanslar çözülene kadar hepsi tekrar tekrar aranır.

Bu seçeneği kullanmak önemli bir performans maliyetine sahiptir. Sadece iki veya daha fazla arşiv arasında kaçınılmaz döngüsel referanslar olduğunda bunu kullanmak en iyisidir.

--accept-bilinmeyen-girdi-kemer

--no-kabul-bilinmeyen-girdi-kemer

Bağlantısına mimarisi tanınamayan giriş dosyalarını kabul etmesini söyler. Varsayım, kullanıcının ne yaptığını bilmesi ve kasıtlı olarak bu bilinmeyen girdi dosyalarına bağlantı kurmak istemesidir. Bu, 2.14 sürümünden önce linker'ın varsayılan davranışıydı. 2.14 sürümünden itibaren gelen varsayılan davranış, bu giriş dosyalarını reddetmek ve böylece eski davranışı geri yüklemek için -accept-unknown-input-arch seçeneği eklendi.

-assert anahtar kelime

Bu seçenek SunOS uyumluluğu için göz ardı edilir.

-Bdynamic

-dy

-call_shared

Dinamik kütüphanelere karşı bağlantı. Bu sadece paylaşılan kütüphanelerin desteklendiği platformlarda anlamlıdır. Bu seçenek normalde bu tür platformlarda varsayılandır. Bu seçeneğin farklı varyantları çeşitli sistemlerle uyumluluk içindir. Bu seçeneği komut satırında birden çok kez kullanabilirsiniz: Bunu takip eden -l seçeneklerini bulmak için kütüphaneyi etkiler.

-Bgroup

Dinamik kısımdaki "DT_FLAGS_1" girişindeki "DF_1_GROUP" bayrağını ayarlayın. Bu, çalışma zamanı bağlayıcısının bu nesne içindeki aramaları ve yalnızca grubun içinde gerçekleştirilecek bağımlılıklarını ele geçirmesine neden olur. -no-undefined ima edilir. Bu seçenek sadece paylaşılan kütüphaneleri destekleyen ELF platformlarında anlamlıdır.

-Bstatic

-dn

-non_shared

-statik

Paylaşılan kütüphanelere karşı bağlantı kurmayın. Bu sadece paylaşılan kütüphanelerin desteklendiği platformlarda anlamlıdır. Bu seçeneğin farklı varyantları çeşitli sistemlerle uyumluluk içindir. Bu seçeneği komut satırında birden çok kez kullanabilirsiniz: Bunu takip eden -l seçeneklerini bulmak için kütüphaneyi etkiler.

-Bsymbolic

Paylaşılan kitaplık oluştururken, genel sembollere yapılan referansları, varsa, paylaşılan kitaplıktaki tanıma bağlayın. Normalde, paylaşılan kütüphane ile bağlantılı bir programın, paylaşımlı kütüphane içindeki tanımı geçersiz kılması mümkündür. Bu seçenek yalnızca paylaşılan kütüphaneleri destekleyen ELF platformlarında anlamlıdır.

--check kesitler

no--bölümleri kontrol

Bağlayıcıdan herhangi bir çakışma olup olmadığını görmek için atanmış olduktan sonra bölüm adreslerini kontrol etmemesini ister. Normalde, bağlayıcı bu kontrolü gerçekleştirecek ve herhangi bir çakışma bulduğunda uygun hata mesajları üretecektir. Linker, bindirmelerdeki bölümleri bilir ve bunlara izin verir. Varsayılan davranış, komut satırı anahtarı - denetim bölümleri kullanılarak geri yüklenebilir.

--cref

Bir çapraz referans tablosu çıkar. Bir linker harita dosyası oluşturuluyorsa, çapraz referans tablosu harita dosyasına yazdırılır. Aksi takdirde standart çıktıya basılır.

Tablonun formatı kasıtlı olarak basittir, böylelikle gerektiğinde bir betik tarafından kolayca işlenebilir. Semboller yazdırılır, isme göre sıralanır. Her sembol için, dosya adlarının bir listesi verilir. Sembol tanımlanmışsa, listelenen ilk dosya tanımın yeridir. Kalan dosyalar sembol referansları içerir.

no-tanımlamak-ortak

Bu seçenek, adreslerin ortak sembollere atanmasını engeller. "INHIBIT_COMMON_ALLOCATION" komut dosyası komutu aynı etkiye sahiptir.

--no-define-common seçeneği, çıktı dosya türünün seçiminden Ortak sembollere adres atama kararının ayrıştırılmasına izin verir; Aksi takdirde, Ortak sembollere adres atayan bir yeniden yüklenemeyen çıkış tipi zorlanır. --no-define-common kullanımı , yalnızca ana programda atanacak ortak bir kütüphaneden başvurulan ortak sembollere izin verir. Bu, paylaşılan kitaplıktaki kullanılmayan yinelenen alanı ortadan kaldırır ve ayrıca çalışma zamanı sembolü çözümlemesi için özelleştirilmiş arama yollarına sahip birçok dinamik modül olduğunda yanlış çoğaltmaya yönelik olası karışıklıkların önüne geçer.

--defsym sembolü = ifade

İfadenin verdiği mutlak adresi içeren çıktı dosyasında global bir sembol oluşturun. Komut satırında birden çok sembol tanımlamak için bu seçeneği gerektiği kadar kullanabilirsiniz. Bu bağlamda ifade için sınırlı bir aritmetik biçimi desteklenir: onaltılık bir sabit veya varolan bir sembolün adını verebilir veya onaltılık sabitleri veya simgeleri eklemek veya çıkarmak için "+" ve "-" kullanın. Daha ayrıntılı ifadelere ihtiyacınız varsa, bir komut dosyasından linker komut dilini kullanmayı düşünün. Not: sembol arasında beyaz boşluk olmamalı, eşittir işareti (`` = '') ve ifade .

--demangle [= stil ]

no-demangle

Bu seçenekler, sembol mesajlarının hata mesajlarında ve diğer çıkışlarda sıralanıp çizilmeyeceğini kontrol eder. Linker sıralı olarak anlatıldığında, sembol isimlerini okunabilir bir şekilde sunmaya çalışır: nesne dosya formatı tarafından kullanılıyorsa ön alt çizgileri çizer ve C + + sembollü sembol isimlerini kullanıcı tarafından okunabilir isimlere dönüştürür. Farklı derleyiciler farklı yönetim stilleri var. İsteğe bağlı ayrıştırma stili argümanı, derleyiciniz için uygun bir ayrıştırma stili seçmek için kullanılabilir. COLLECT_NO_DEMANGLE ortam değişkeni ayarlanmadıkça , bağlayıcı varsayılan olarak değişecektir . Bu seçenekler varsayılanı geçersiz kılmak için kullanılabilir.

--dinamik linker dosyası

Dinamik bağlayıcının adını ayarlayın. Bu sadece dinamik olarak bağlanmış ELF çalıştırılabilirleri oluştururken anlamlıdır. Varsayılan dinamik bağlayıcı normalde doğrudur; Ne yaptığınızı bilmiyorsanız bunu kullanmayın.

--embedded-relocs

Bu seçenek, -membedded-pic seçeneği ile oluşturulan MIPS gömülü PIC kodunu, GNU derleyicisine ve montajcısına bağlarken sadece anlamlıdır. Bağlayıcı, statik olarak işaretçi değerlerine başlatılan verileri yeniden konumlandırmak için çalışma zamanında kullanılabilecek bir tablo oluşturmasına neden olur. Detaylar için testsuite / ld-empic koduna bakınız.

--fatal-uyarılar

Tüm uyarıları hata olarak ele al .

force-exe eki

Bir çıktı dosyasının bir .exe son ekine sahip olduğundan emin olun.

Başarılı bir şekilde tam olarak bağlanmış bir çıkış dosyasının bir ". Exe " veya " .dll " son eki yoksa, bu seçenek, bağlayıcının çıktı dosyasını bir ".exe" soneki ile aynı ada sahip birine kopyalamaya zorlar. Bu seçenek, bir Microsoft Windows ana bilgisayarında değiştirilmemiş Unix makefiles kullanıldığında yararlıdır, çünkü Windows'un bazı sürümleri bir ".exe" soneki ile bitmedikçe bir görüntüyü çalıştırmaz.

no-gc bölümler

--gc kesitler

Kullanılmayan giriş bölümlerinin çöp toplama özelliğini etkinleştirin. Bu seçeneği desteklemeyen hedeflerde yoksayılır. Bu seçenek -r ile uyumlu değildir ve dinamik bağlantı ile kullanılmamalıdır. Varsayılan davranış (bu çöp koleksiyonunu gerçekleştirmemek ), komut satırındaki --no-gc bölümleri belirtilerek geri yüklenebilir.

--yardım et

Standart çıktı ve çıkıştaki komut satırı seçeneklerinin bir özetini yazdırın.

--target yardım

Standart çıktı ve çıkış üzerindeki tüm hedefe özel seçeneklerin bir özetini yazdırın.

-Harita haritası

Dosya mapfile bir bağlantı haritası yazdırın. Yukarıdaki -M seçeneğinin açıklamasına bakın.

no-devam-bellek

ld normalde bellekte giriş dosyalarının sembol tablolarını önbelleğe alarak bellek kullanımı hızını optimize eder. Bu seçenek, yerine bellek tablolarını optimize etmek için sembol tablolarını gerektiği şekilde yeniden okumanızı söyler. Büyük bir yürütülebilir dosyayı bağlarken ld bellek alanı bittiğinde bu gerekli olabilir.

no-tanımlanmamış

-z def

Normalde sembolik olmayan bir paylaşılan kütüphane oluşturulurken, tanımlanmamış sembollere izin verilir ve çalışma zamanı yükleyicisi tarafından çözülmeye bırakılır. Bu seçenekler, tanımlanmamış sembollere izin vermez.

--allow-çoklu-tanımlı

-z muldefs

Normalde bir sembol birçok kez tanımlandığında, linker ölümcül bir hatayı rapor edecektir. Bu seçenekler çoklu tanımlara izin verir ve ilk tanım kullanılır.

--allow-shlib-tanımlanmamış

--no-undefined ayarlanmış olsa bile, paylaşılan nesnelerde tanımlanmamış sembollere izin verin. Net sonuç, normal nesnelerdeki tanımsız sembollerin yine de bir hatayı tetikleyeceğidir, ancak paylaşılan nesnelerde tanımlanmamış semboller göz ardı edilir. No_undefined uygulaması, çalışma zamanı bağlayıcısının tanımlanmamış semboller üzerinde tıkanacağı varsayımını yapar. Ancak, en az bir sistem (BeOS) vardır; burada ortak kütüphanelerde tanımlanmamış semboller normaldir, çünkü çekirdek, mevcut mimari için hangi işlevin en uygun olduğunu seçmek için yükleme zamanında onları yamalar. IE dinamik olarak uygun bir memset işlevi seçin. Görünüşe göre, HPPA paylaşılan kütüphanelerin tanımsız sembollere sahip olması normaldir.

--no-tanımsız-versiyon

Normalde, bir sembol tanımsız bir sürüme sahipse, bağlayıcı bunu göz ardı eder. Bu seçenek, tanımlanmamış sürümle sembollere izin vermez ve bunun yerine önemli bir hata verilir.

no-uyarmak-uyumsuzluğu

Normalde, farklı nedenlerle veya farklı endianness'lar için derlenmiş olmaları nedeniyle, bazı nedenlerle uyuşmayan giriş dosyalarını birbirine bağlamaya çalışırsanız hata verecektir. Bu seçenek, olası hatalara sessizce izin vermesi gerektiğini söyler. Bu seçenek, bağlantı hatalarının uygunsuz olmasını sağlayan bazı özel eylemlerde bulunduğunuz durumlarda dikkatli bir şekilde kullanılmalıdır.

no-tam arşiv

Sonraki arşiv dosyaları için --whole-arşiv seçeneğinin etkisini kapatın.

--noinhibit-exec

Hala kullanılabilir olduğunda, yürütülebilir çıktı dosyasını saklayın. Normal olarak, linker link işlemi sırasında hatalarla karşılaşırsa bir çıktı dosyası üretmeyecektir; Herhangi bir hataya neden olduğunda çıktı dosyası yazmadan çıkar.

-nostdlib

Sadece komut satırında açıkça belirtilmiş kütüphane dizinleri arayın. Bağlayıcı komut dosyalarında belirtilen kitaplık dizinleri (komut satırında belirtilen bağlayıcı komut dosyaları dahil) dikkate alınmaz.

- çıkış formatı

ld , birden fazla türde nesne dosyasını destekleyecek şekilde yapılandırılabilir. Ld'niz bu şekilde yapılandırılmışsa, çıkış nesnesi dosyasının ikili biçimini belirtmek için --oformat seçeneğini kullanabilirsiniz. Ld , alternatif nesne formatlarını destekleyecek şekilde yapılandırılsa bile, genellikle bunu belirtmenize gerek yoktur, çünkü her makinede en yaygın format olan varsayılan çıktı formatı olarak üretilecek şekilde yapılandırılmalıdır. çıktı biçimi , BFD kitaplıkları tarafından desteklenen belirli bir biçimin adı olan bir metin dizesidir. (Kullanılabilir ikili formatları objdump -i ile listeleyebilirsiniz .) "OUTPUT_FORMAT" komut dosyası komutu da çıkış formatını belirtebilir, ancak bu seçenek onu geçersiz kılar.

-qmagic

Linux uyumluluğu için bu seçenek dikkate alınmaz.

-Qy

Bu seçenek SVR4 uyumluluğu için göz ardı edilir.

--Rahatlayın

Makineye bağlı efektlerle bir seçenek. Bu seçenek sadece birkaç hedefte desteklenir.

Bazı platformlarda, -relax seçeneği, linker, programda adresleme ve adres nesnelerini gevşetme ve çıktı nesnesi dosyasında yeni komutları sentezleme gibi sorunları çözdüğünde mümkün olan genel optimizasyonları gerçekleştirir.

Bazı platformlarda, bu bağlantı süresi global optimizasyonları, elde edilen yürütülebilir dosyanın sembolik hata ayıklamasını olanaksız hale getirebilir. Bu, Matsushita MN10200ve MN10300 işlemci ailesi için geçerli olduğu bilinmektedir.

Bunun desteklenmediği platformlarda, - keten kabul edilir, ancak göz ardı edilir.

--retain-sembolleri dosya dosya adı

Sadece dosya isminde listelenen sembolleri saklayın, tüm diğerlerini atın. dosya adı sadece satır başına bir sembol adı olan düz bir dosyadır. Bu seçenek, çalışma zamanı belleğini korumak için büyük bir global simge tablosunun yavaş yavaş toplandığı ortamlarda (VxWorks gibi) özellikle kullanışlıdır.

--retain-symbols-file , tanımlanmamış semboller ya da yeniden yerleştirmeler için gerekli sembolleri atmaz.

Komut satırında --retain-symbol-file komutunu sadece bir kez belirtebilirsiniz. -S ve -S'yi geçersiz kılar.

-rpath dir

Çalışma zamanı kitaplığı arama yoluna bir dizin ekleyin. Bu, bir ELFexecutable'ı paylaşılan nesnelerle ilişkilendirirken kullanılır. Tüm -rpath argümanları birleştirilir ve çalışma zamanında paylaşılan nesneleri bulmak için bunları kullanan çalışma zamanı bağlayıcısına iletilir. -rpath seçeneği ayrıca, bağlantıya açıkça dahil edilen paylaşılan nesnelerin ihtiyaç duyduğu paylaşılan nesneleri bulurken de kullanılır; -rpath-link seçeneğinin açıklamasına bakın. Bir ELF yürütülebilir dosyasını bağlarken -rpath kullanılmazsa, tanımlanmışsa "LD_RUN_PATH" ortam değişkeninin içeriği kullanılır.

-Rpath seçeneği SunOS'ta da kullanılabilir. Varsayılan olarak, SunOS'ta, bağlayıcı, verilen tüm L seçeneklerinden bir çalışma zamanı arama yama oluşturur. Bir -rpath seçeneği kullanılırsa, çalışma zamanı arama yolu, -L seçeneklerini göz ardı ederek, sadece -rpath seçeneklerini kullanarak oluşturulacaktır. Bu, NFS'ye bağlı dosya sistemlerinde olabilecek birçok L seçeneği ekleyen gcc kullanırken yararlı olabilir.

Diğer ELF bağlayıcılarıyla uyumluluk için, -R seçeneğine bir dosya adı yerine bir dizin adı gelirse , -rpath seçeneği olarak kabul edilir.

-rpath-link DIR

ELF veya SunOS kullanırken, bir paylaşılan kitaplık başka bir tane gerektirebilir. Bu, "ld-paylaştırılmış" bağlantı, giriş dosyalarından biri olarak paylaşılan bir kitaplık içerdiğinde gerçekleşir.

Bağlayıcı, paylaşılmayan, yeniden yüklenemeyen bir bağlantı yaparken böyle bir bağımlılıkla karşılaştığında, otomatik olarak gerekli paylaşılan kitaplığı bulmaya ve açıkça dahil edilmediyse bağlantıya eklemeyi deneyecektir. Böyle bir durumda, -rpath-link seçeneği, aranacak ilk dizin kümesini belirtir. -rpath-link seçeneği, ya kolonlarla ayrılmış isimlerin bir listesini belirterek ya da birden çok kez görünerek bir dizi dizin ismini belirtebilir.

Bu seçenek, paylaşılan bir kitaplığa sıkı bir şekilde derlenmiş olabilecek arama yolunu geçersiz kıldığı için dikkatli kullanılmalıdır. Böyle bir durumda, çalışma zamanı bağlayıcısından beklenmedik bir şekilde farklı bir arama yolu kullanmak mümkündür.

Bağlayıcı, gerekli paylaşılan kitaplıkları bulmak için aşağıdaki arama yollarını kullanır.

1.

-rpath-link seçenekleri ile belirtilen dizinler.

2.

-rpath seçenekleriyle belirtilen dizinler. -rpath ve -rpath-link arasındaki fark, -rpath seçenekleriyle belirtilen dizinlerin yürütülebilir dosyaya dahil edilmesi ve çalışma zamanında kullanılmasıdır, oysa -rpath-link seçeneği sadece bağlantı zamanında etkilidir. Sadece yerel linker içindir.

3.

Bir ELF sisteminde, -rpath ve "rpath-link" seçenekleri kullanılmadıysa, "LD_RUN_PATH" ortam değişkeninin içeriğini arayın. Sadece yerel linker içindir.

4.

SunOS'ta -rpath seçeneği kullanılmadıysa -L seçenekleri kullanılarak belirtilen dizinleri arayın.

5.

Yerel bir bağlayıcı için "LD_LIBRARY_PATH" ortam değişkeninin içeriği.

6.

Yerel bir ELF bağlayıcısı için, paylaşılan bir kitaplığın "DT_RUNPATH" veya "DT_RPATH" içindeki dizinler, onun gereksinim duyduğu paylaşılan kitaplıklar için aranır. "DT_RUNPATH" girişleri mevcutsa "DT_RPATH" girişleri dikkate alınmaz.

7.

Varsayılan dizinler, normalde / lib ve / usr / lib .

8.

ELF sisteminde yerel bir linker için, eğer /etc/ld.so.conf dosyası varsa, o dosyada bulunan dizinlerin listesi.

Gerekli paylaşılan kitaplık bulunamazsa, bağlayıcı bir uyarı verir ve bağlantıya devam eder.

-shared

-Bshareable

Paylaşılan bir kütüphane oluşturun. Bu şu anda sadece ELF, XCOFF ve SunOS platformlarında desteklenmektedir. SunO'da, -e seçeneği kullanılmazsa ve bağlantıda tanımlanmamış semboller varsa, bağlayıcı otomatik olarak bir paylaşılan kitaplık oluşturacaktır.

--sort-ortak

Bu seçenek, ortak sembolleri, uygun çıktı bölümlerine yerleştirdiğinde, boyuta göre sıralamasını söyler. İlk önce tüm bayt sembollerini, sonra iki baytı, sonra dört baytı ve sonra her şeyi. Bu, hizalama kısıtlamaları nedeniyle semboller arasındaki boşlukları önlemek içindir.

--split-by-dosya [ boyut ]

-split-by-reloc'a benzer, ancak boyutlara ulaşıldığında her giriş dosyası için yeni bir çıkış bölümü oluşturur. verilemezse, boyut varsayılanı 1'dir.

--split-by-reloc [ sayısı ]

Çıkış dosyasında ekstra bölümler oluşturmaya çalışır, böylece dosyadaki tek bir çıkış bölümü sayımın yerini değiştirmekten daha fazlasını içermez. Bu, COFF nesne dosya formatı ile belirli gerçek zamanlı kernellere indirilmek üzere büyük yeniden yüklenebilen dosyalar oluştururken kullanışlıdır; COFF, tek bir bölümde 65535'ten fazla yer değiştirmeyi temsil edemediğinden. Bunun, keyfi bölümleri desteklemeyen nesne dosya formatları ile çalışmaz hale geleceğini unutmayın. Bağlayıcı, yeniden dağıtım için tekil giriş bölümlerini ayırmayacaktır, bu yüzden tek bir giriş bölümü sayım yerlerinden daha fazlasını içeriyorsa, bir çıkış bölümü, birçok yeniden yerleştirmeyi içerecektir. varsayılan değeri 32768 değerine çevirir.

--stats

Yürütme süresi ve bellek kullanımı gibi bağlayıcının çalışmasıyla ilgili istatistikleri hesaplayın ve görüntüleyin.

--traditional format

Bazı hedefler için, ld'nin çıktısı, bazı mevcut linker çıktısından bazı yönlerden farklıdır. Bu anahtar, ld yerine geleneksel biçimi kullanmasını ister.

Örneğin, SunOS'ta, ld sembol dizisi tablosundaki çift girişleri birleştirir. Bu, bir çıktı dosyasının boyutunu tam hata ayıklama bilgisiyle yüzde 30'un üzerinde azaltabilir. Ne yazık ki, SunOS "dbx" programı sonuçlanan programı okuyamaz ("gdb" nin hiçbir problemi yoktur). - eski biçimli anahtar, yinelenen girişleri birleştirmemesini söyler.

--section-start sectionname = org

Çıkış dosyasında , org tarafından verilen mutlak adreste bir bölüm bulun. Komut satırında birden çok bölüm bulmak için bu seçeneği gerektiği kadar kullanabilirsiniz. org tek bir onaltılık tamsayı olmalıdır; Diğer bağlayıcılarla uyumluluk için, genellikle onaltılı değerlerle ilişkilendirilmiş olan önde gelen 0x'yi atlayabilirsiniz. Not: bölüm adı , eşittir işareti (`` = '') ve org arasında boşluk olmamalıdır.

-Tbss org

-Tdata org

-Text metin

--- Başlangıç ​​adresi olarak --- sırasıyla --- "bss", "data" veya çıktı dosyasının "text" segmenti olarak org kullanın. org tek bir onaltılık tamsayı olmalıdır; Diğer bağlayıcılarla uyumluluk için, genellikle onaltılı değerlerle ilişkilendirilmiş olan önde gelen 0x'yi atlayabilirsiniz.

--dll-ayrıntılı

--verbose

Ld sürüm numarasını görüntüleyin ve desteklenen bağlayıcı öykünmelerini listeleyin. Hangi giriş dosyalarının açılabileceğini ve açılamayacağını göster. Bağlayıcı tarafından kullanılan bağlayıcı komut dosyasını görüntüleyin.

--version-script = sürüm komut dosyası dosyası

Bağdaştırıcıya bir sürüm komut dosyasının adını belirtin. Bu genellikle, oluşturulan kitaplık için sürüm heirarchy hakkında ek bilgi belirtmek için paylaşılan kitaplıklar oluştururken kullanılır. Bu seçenek sadece paylaşılan kütüphaneleri destekleyen ELF platformlarında anlamlıdır.

--warn-ortak

Ortak bir sembol başka bir ortak sembolle veya bir sembol tanımıyla birleştirildiğinde uyar. Unix bağlayıcıları bu biraz özensiz uygulamaya izin verir, ancak diğer bazı işletim sistemlerinde bağlayıcılar kullanmaz. Bu seçenek, global sembolleri birleştirmekten kaynaklanan olası sorunları bulmanızı sağlar. Ne yazık ki, bazı C kütüphaneleri bu uygulamayı kullanmaktadır, bu yüzden kütüphanelerde ve programlarınızda semboller hakkında bazı uyarılar alabilirsiniz.

Burada C örnekleriyle gösterilen üç çeşit küresel sembol vardır:

int i = 1;

Çıkış dosyasının başlangıç ​​veri bölümündeki bir tanım.

extern int;

Boşluk ayırmayan tanımlanmamış bir başvuru. Değişken için bir tanım veya ortak bir sembol olmalı.

int i;

Ortak bir sembol. Bir değişken için yalnızca (bir veya daha fazla) ortak sembol varsa, çıktı dosyasının başlatılmamış veri alanına gider. Bağlayıcı, aynı değişken için birden çok ortak sembolü tek bir sembolde birleştirir. Farklı boyutlardaysa, en büyük boyutu seçer. Bağlayıcı, aynı değişkenin bir tanımı varsa, ortak bir sembolü bir bildirime dönüştürür.

- Ortak seçenek, beş çeşit uyarı üretebilir. Her uyarı bir çift satırdan oluşur: ilk önce karşılaşılan sembolü tanımlar ve ikincisi aynı isimle karşılaşılan önceki sembolü tanımlar. İki sembolün biri veya ikisi ortak bir sembol olacaktır.

1.

Ortak bir sembolü referansa dönüştürmek, çünkü sembol için zaten bir tanım var.

(
): uyarı: ` '' in tanımı (
) tarafından geçersiz kılınır: : burada tanımlanmış

2.

Ortak bir simgeyi referansa dönüştürmek, çünkü sembol için daha sonra bir tanımla karşılaşılır. Bu, önceki durumla aynıdır, ancak semboller farklı bir sırayla karşılaşılır.

(
): uyarı: ` '' tanımının ortak (
) geçersiz kılınması: uyarı: yaygındır

3.

Bir önceki aynı büyüklükte ortak sembolle ortak bir sembolün birleştirilmesi.

(
): uyarı: ` ' (
) birden çok ortak: uyarı: önceki ortak burada

4.

Bir önceki büyük ortak sembolle ortak bir sembolün birleştirilmesi.

(
): uyarı: <<>> (
) tarafından geçersiz kılınmış < '' ın ortak noktası: uyarı: daha yaygın olanı burada

5.

Bir önceki küçük ortak sembolle ortak bir sembolün birleştirilmesi. Bu, önceki durumla aynıdır, ancak semboller farklı bir sırayla karşılaşılır.

(
): uyarı: <<>> (
) kuralını geçersiz kılan <<>> 'ın ortak noktası: uyarı: daha küçük ortak burada

--warn-kurucular

Global kurucular kullanılıyorsa uyar. Bu sadece birkaç nesne dosya formatı için kullanışlıdır. COFF veya ELF gibi formatlar için linker, global kurucuların kullanımını tespit edemez.

--warn-çoklu-gp

Çıkış dosyasında birden çok global işaretçi değeri gerekiyorsa uyar. Bu sadece Alpha gibi belirli işlemciler için anlamlıdır. Özellikle, bazı işlemciler özel bir bölümde büyük değerli sabitler koydu. Özel bir kayıt (global işaretçi), bu bölümün ortasına işaret eder, böylece sabitler, bir taban-kayıt göreceli adresleme modu vasıtasıyla verimli bir şekilde yüklenebilir. Baz-register relatif modundaki ofset sabit ve nispeten küçük olduğu için (örneğin, 16 bit), bu sabit havuzun maksimum boyutunu sınırlar. Bu nedenle, büyük programlarda, tüm olası sabitleri ele alabilmek için genellikle çoklu global işaretçi değerlerinin kullanılması gereklidir. Bu seçenek, bu durum gerçekleştiğinde uyarı verilmesine neden olur.

--warn-once

Sadece tanımlanmamış her sembol için bir kere uyar, modülün başına bir defa değil.

--warn-kesit-hizalamak

Bir çıkış bölümünün adresi hizalama nedeniyle değiştirilirse uyar. Tipik olarak, hizalama bir giriş bölümü tarafından ayarlanacaktır. Adres sadece açıkça belirtilmemişse değiştirilecektir; "SECTIONS" komutu, bölüm için bir başlangıç ​​adresi belirtmezse, yani.

--whole-arşiv

--whole-arşivi seçeneğinden sonra komut satırında belirtilen her bir arşiv için, gerekli nesne dosyaları için arşivde arama yapmak yerine, arşivdeki her nesne dosyasını bağlantıdaki arşive dahil edin. Bu, normal olarak bir arşiv dosyasını paylaşılan bir kitaplığa dönüştürmek için kullanılır; böylece, ortaya çıkan paylaşılan kitaplığa dahil edilecek her nesne zorlanır. Bu seçenek bir kereden fazla kullanılabilir.

Bu seçeneği gcc'den kullanırken iki not: İlk olarak, gcc bu seçeneği bilmiyor, bu yüzden -Wl -whole-arşivi kullanmanız gerekiyor . İkincisi, arşiv listenizden sonra -Wl, -o-tam-arşivi kullanmayı unutmayın, çünkü gcc kendi arşiv listesini kendi bağlantınıza ekleyecektir ve bu bayrağın bunları etkilemesini istemeyebilirsiniz.

- sarma sembolü

Sembol için sarıcı işlevini kullanın. Sembole herhangi bir tanımlanmamış referans "__ wrap_symbol" olarak çözülecektir. "__real_symbol" için tanımlanmamış herhangi bir referans, simgeye çözülecektir.

Bu, bir sistem işlevi için bir sarıcı sağlamak için kullanılabilir. Sarıcı işlevi "__wrap_symbol" olarak adlandırılmalıdır. Sistem işlevini çağırmak istiyorsa, "__ real_symbol" öğesini çağırmalıdır.

İşte önemsiz bir örnek:

void * __wrap_malloc (int c) {printf ("% ld \ n" ile çağrılan malloc, c); dönüş __real_malloc (c); }

Bu dosya ile başka bir kod --wrap malloc kullanarak bağlarsanız , tüm "malloc" çağrıları bunun yerine "__wrap_malloc" işlevini çağırır. "__wrap_malloc" içindeki "__real_malloc" araması gerçek "malloc" işlevini çağırır.

"__real_malloc" işlevini de sağlamak isteyebilirsiniz, böylece --wrap seçeneği olmayan bağlantılar başarılı olacaktır. Bunu yaparsanız, "__ real_malloc" tanımını "__wrap_malloc" ile aynı dosyaya koymamalısınız; Bunu yaparsanız, assembler, linker'ın "malloc" a geçme şansı olmadan çağrıyı çözebilir.

--enable-new-dtags

--disable-yeni-dtags

Bu bağlayıcı, ELF'deki yeni dinamik etiketleri oluşturabilir. Ancak eski ELF sistemleri onları anlamayabilir. --enable-new-dtags belirtirseniz , dinamik etiketler gerektiği gibi oluşturulur. --disable-new-dtags belirtirseniz , yeni dinamik etiketler oluşturulmaz. Varsayılan olarak, yeni dinamik etiketler oluşturulmuyor. Bu seçeneklerin sadece forel sistemleri için mevcut olduğunu unutmayın.

I386 PE bağlayıcısı, çıktıyı normal bir yürütülebilir dosya yerine dinamik olarak bağlantılı bir kitaplığa (DLL) dönüştüren -shared seçeneğini destekler. Bu seçeneği kullandığınızda "* .dll" çıktısını almalısınız. Ayrıca linker, linker komut satırında bir nesne dosyası gibi belirtilebilecek standart "* .def" dosyalarını tam olarak desteklemektedir (aslında, bağlandıklarından emin olmak için sembolleri dışa aktardığı arşivlerden önce gelmelidir. sadece normal bir nesne dosyası gibi).

Tüm hedefler için ortak seçeneklere ek olarak, i386 PE linkeri, i386 PE hedefine özgü ek komut satırı seçeneklerini destekler. Değer alan seçenekler değerlerinden boşluk veya eşittir işareti ile ayrılabilir.

--add-stdcall-takma

Eğer belirtilmişse, stdcall son ekine (@ nn ) sahip semboller olduğu gibi dışa aktarılır ve ayrıca son eklenir.

--baskı dosyası

Dosyayı , dlltool ile DLL oluşturmak için gereken tüm yeniden konumlandırmaların temel adreslerini kaydedecek bir dosyanın adı olarak kullanın.

--dll

Düzenli bir yürütülebilir dosya yerine bir DLL oluşturun. Ayrıca verilen bir ".def" dosyasında -shared kullanabilir veya bir "KÜTÜPHANE" belirtebilirsiniz.

enable-stdcall-düzeltme

--disable-stdcall-düzeltme

Eğer link çözülemeyecek bir sembol bulursa, sadece sembol isminin (cdecl vs stdcall) biçiminde farklı olan ve bu sembolü bağlayarak çözecek başka bir sembol arayarak “fuzzy linking” yapmaya çalışacaktır. maç için Örneğin, undefined sembolü "_foo", "_foo @ 12" işlevine bağlanabilir veya "_bar @ 16" tanımlanmamış sembolü "_bar" işlevine bağlanabilir. Linker bunu yaptığında, normalde bağlantı kuramamış olması gerektiğinden, bazen üçüncü taraf dlls'den oluşturulan kütüphanelerin içe aktarılması, bu özelliğin kullanılabilir olması için bir uyarıya yol açabilir. --enable-stdcall-fixup belirtirseniz, bu özellik tamamen etkinleştirilir ve uyarılar yazdırılmaz. --disable-stdcall-fixup belirtirseniz, bu özellik devre dışı bırakılır ve bu tür uyumsuzluklar hata olarak kabul edilir.

--export-all-semboller

Verilirse, bir DLL oluşturmak için kullanılan nesnelerdeki tüm global simgeler DLL tarafından dışa aktarılır. Dışa aktarılan sembollerin olmaması durumunda, bu varsayılan değerdir. Semboller açıkça DEF dosyaları aracılığıyla dışa aktarıldığında veya işlev öznitelikleriyle örtülü olarak dışa aktarıldığında, bu seçenek verilmedikçe varsayılan olarak başka hiçbir şey verilmez. "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" ve "impure_ptr" sembollerinin otomatik olarak dışa aktarılmayacağını unutmayın. Ayrıca, diğer DLL'lerden içe aktarılan semboller, yeniden dışa aktarılmayacak ve "_head_" ile başlayan veya "_iname" ile bitenler gibi DLL iç düzenini belirten semboller olmayacaktır. Ayrıca "libgcc", "libstd ++", "libmingw32" veya "crtX.o" öğelerinden hiçbir sembol verilmeyecektir. "__rtti_" veya "__builtin_" ile başlayan isimler C ++ DLL'lerine yardımcı olmak için dışa aktarılmayacak. Son olarak, dışa aktarılmayan cygwin özel sembollerinin kapsamlı bir listesi vardır (açıkçası, bu, cygwin hedefleri için DLL'ler oluşturulurken geçerlidir).

Bu cygwin-excludes şunlardır: "_cygwin_dll_entry @ 12", "_cygwin_crt0_common @ 8", "_ cygwin_noncygwin_dll_entry @ 12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3 "ve" çevre ".

--exclude-semboller sembol , sembol , ...

Otomatik olarak dışa aktarılmaması gereken sembollerin listesini belirtir. Sembol adları virgül veya virgülle sınırlandırılabilir.

--exclude-libs lib , lib , ...

Sembollerin otomatik olarak dışa aktarılmaması gereken arşiv kitaplıklarının bir listesini belirtir. Kütüphane adları virgül veya virgülle sınırlandırılabilir. "--exclude-libs ALL" öğesinin belirtilmesi, otomatik arşivlemeden tüm arşiv kitaplıklarındaki sembolleri içermez. Bir .def dosyasında açıkça listelenen semboller, bu seçenek ne olursa olsun, yine de dışa aktarılır.

--file hizalama

Dosya hizalamasını belirtin. Dosyadaki bölümler her zaman bu sayının katları olan dosya ofsetleri ile başlar. Bu varsayılan 512'dir.

--hesap rezervi

--hesap rezervi

Bu program için yığın olarak kullanılmak üzere saklanacak bellek miktarını (ve isteğe bağlı olarak) belirtin. Varsayılan 1Mb saklıdır, 4K taahhüt edilir.

- üssü baz değeri

Programınızın veya dll'nin temel adresi olarak değeri kullanın. Bu, programınız veya dll yüklendiğinde kullanılacak en düşük bellek konumudur. Senin dll performansının yerini değiştirme ve iyileştirme ihtiyacını azaltmak için, her birinin benzersiz bir taban adresi olmalı ve başka bir dll ile örtüşmemelidir. Varsayılan, yürütülebilir dosyalar için 0x400000 ve dlls için 0x10000000'dir.

--kill-en

Verilirse, stdcall ekleri ( nn ), dışa aktarılmadan önce sembollerden sıyrılacaktır.

--major-image-sürüm değeri

`` Image version '' büyük sayısını ayarlar. Varsayılanlar 1.

--major-os sürümü değeri

`` Os sürümü '' nin büyük sayısını ayarlar. Varsayılanlar 4'e.

--major-alt sistem-sürüm değeri

`` Alt sistem sürümü '' nin büyük sayısını ayarlar. Varsayılanlar 4'e.

--minor-image-versiyon değeri

`` Resim sürümü '' 'nin küçük sayısını ayarlar. Varsayılan değer 0'dır.

--minor-os-sürüm değeri

`` Os sürümü '' nin küçük sayısını ayarlar. Varsayılan değer 0'dır.

- minör-alt sistem-sürüm değeri

`` Alt sistem sürümü '' nin küçük sayısını ayarlar. Varsayılan değer 0'dır.

--output-def dosyası

Bağlayıcı, linker'ın üretmekte olduğu DLL'ye karşılık gelen bir DEF dosyasını içerecek olan dosya dosyasını oluşturacaktır. Bu DEF dosyası ("* .def" olarak adlandırılmalıdır), "dlltool" ile bir içe aktarım kitaplığı oluşturmak için kullanılabilir veya otomatik veya örtük olarak dışa aktarılan sembollere bir başvuru olarak kullanılabilir.

- dosya -implib dosyası

Bağlayıcı, linkerin oluşturduğu DLL'ye karşılık gelen bir ithalat kütüphanesini içerecek dosya dosyasını oluşturacaktır. Bu import lib ("* .dll.a" veya "* .a" olarak adlandırılmalıdır), istemcilere oluşturulan DLL ile bağlantı kurmak için kullanılabilir, bu davranış ayrı bir "dlltool" içe aktarma kitaplığı oluşturma adımını atlamayı olanaklı kılar.

enable-otomatik imaj-baz

"--image-base" argümanı kullanılarak belirtilmemişse, DLL'ler için resim tabanını otomatik olarak seçin. Her DLL için benzersiz görüntü tabanları oluşturmak için dllname'den oluşturulan bir karma kullanarak, bellek yürütme ve programın yürütülmesini geciktiren yer değiştirmelerden kaçınılır.

--disable-otomatik imaj-baz

Otomatik olarak benzersiz bir görüntü tabanı oluşturmayın. Kullanıcı tarafından belirtilen bir görüntü tabanı ("--image-base") yoksa, platform varsayılanını kullanın.

--dll-arama-önek dizesi

Bir içe aktarma kütüphanesi olmadan bir dll'ye dinamik olarak bağlanırken, "lib .dll" tercihi için " .dll" ifadesini arayın. Bu davranış, çeşitli `` subplatforms '' için yerleşik DLL'ler arasında kolay bir ayrım sağlar: yerel, cygwin, uwin, pw, vb. Örneğin, cygwin DLL'leri genellikle "--dll-search-prefix = cyg" kullanır.

--enable-oto-ithalat

DATA için "_symbol" dizgesini "__imp__symbol" olarak DLL'lerden içe aktarın ve bu DATAExports ile içe aktarma kitaplıkları oluştururken gerekli thunking sembollerini oluşturun. Bu genellikle 'sadece çalışır' --- ama bazen bu mesajı görebilirsiniz:

"değişken" 'otomatik olarak alınamaz. Lütfen ayrıntılar için ld'nin "--enable-auto-import" belgelerini okuyun.

Bu ileti, bazı (alt) ifadeler, sonuçta iki sabitin toplamı (Win32 içe aktarma tabloları yalnızca bir taneye izin ver) tarafından verilen bir adrese eriştiğinde oluşur. Bunun oluşabileceği durumlar arasında, bir DLL'den içe aktarılan yapısal değişkenlerin üye alanlarına erişim ve bir DLL'den içe aktarılan bir dizi değişkenine sabit bir indeks kullanılması da vardır. Herhangi bir çoklu kelime değişkeni (diziler, yapılar, uzun uzun, vb.) Bu hata koşulunu tetikleyebilir. Bununla birlikte, dışa aktarılan dışa aktarılan değişkenin tam veri tipine bakılmaksızın, ld her zaman onu algılar, uyarıyı verir ve çıkar.

Dışa aktarılan değişkenin veri türünden bağımsız olarak, bu zorluğu çözmek için çeşitli yollar vardır:

Bir yolu --enable-runtime-pseudo-reloc anahtarı kullanmaktır. Bu, çalışma zamanı ortamı için istemci kodunuzdaki referansları ayarlama görevini bırakır; bu nedenle, bu yöntem yalnızca çalışma ortamı çevresi bu özelliği desteklediğinde çalışır.

İkinci bir çözüm, 'sabitlerin' birini, değişken olarak --- yani, derleme zamanında bilinmeyen ve en uygun hale getirilmeyecek şekilde zorlamaktır. Diziler için iki olasılık vardır: a) dizinleyiciyi (dizinin adresi) bir değişken yapın veya b) 'sabit' dizinini bir değişken yapın. Böylece:

extern tipi extern_array []; extern_array [1] -> {volatil tip * t = extern_array; t [1]}

veya

extern tipi extern_array []; extern_array [1] -> {uçucu int t = 1; extern_array [t]}

Yapılar (ve diğer çoklu sözcük veri türlerinin çoğunda) için tek seçenek yapının kendisini (veya uzun uzun veya ...) değişkenini yapmaktır:

extern struct s extern_struct; extern_struct.field -> {volatile struct s * t = & extern_struct; t-> alan}

veya

extern uzun uzun extern_ll; extern_ll -> {volatil uzun uzun * local_ll = & extern_ll; * local_ll}

Bu zorlukla başa çıkmanın üçüncü bir yöntemi, hatalı sembol için 'auto-import' 'i terk etmek ve "__declspec (dllimport)" ile işaretlemektir. Bununla birlikte, uygulamada bir DLL oluşturup oluşturmadığınızı, DLL'ye bağlanacak istemci kodunu oluşturmayı veya yalnızca statik bir kitaplığa / bağlantı oluşturmayı belirten derleme zamanı #defines kullanılmasını gerektirir. 'Sabit ofset ile doğrudan adres' problemini çözmek için çeşitli yöntemler arasında seçim yapmada, tipik gerçek dünya kullanımını düşünmelisiniz:

Orijinal:

--foo.h extern int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Çözüm 1:

--foo.h extern int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Bu geçici çözüm win32 ve cygwin içindir; "optimize etmeyin" * / volatile int * parr = arr; Printf ( "% d \ n", Parr [1]); }

Çözüm 2:

--foo.h / * Not: otomatik dışa aktarma varsayılır (__declspec (dllexport) olmaz) * / #if (tanımlı (_WIN32) || tanımlı (__ CYGWIN__)) && \! (tanımlı (FOO_BUILD_DLL) || tanımlı (FOO_STATIC) )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Bu sorunu önlemek için dördüncü bir yol, kütüphanenizi tekrarlayan değişkenler (örneğin set_foo () ve get_foo () erişim işlevleri) için bir veri arabirimi yerine işlevsel bir arayüz kullanacak şekilde yeniden kodlamaktır .

--disable-oto-ithalat

DLL'lerden DATAimports için "_symbol" ile "__imp__symbol" arasındaki karmaşık bağlantı yapmayı denemeyin.

enable-zamanı-yalancı reloc

Kodunuz --enable-auto-import bölümünde anlatılan ifadeleri içeriyorsa, yani, sıfırdan farklı olmayan bir DLL dosyasından DATA ayırırsa, bu anahtar, çalışma zamanı ortamı tarafından referansları ayarlamak için kullanılabilecek bir 'çalışma zamanı sahte yeniden konumlandırma' vektörü oluşturacaktır. müşteri kodunuzdaki bu tür veriler için.

--disable-zamanı-yalancı reloc

DLL'lerden sıfır olmayan offset DATA ithalatı için sözde yeniden konumlandırma oluşturmayın. Bu varsayılan.

--enable-ekstra-pe-ayıklama

Otomatik içe aktarma sembolü thunking ile ilgili ek hata ayıklama bilgilerini göster.

--section hizalama

Bölüm hizalamasını ayarlar. Bellekteki bölümler her zaman bu sayının katları olan adreslerde başlayacaktır. Varsayılan değerler 0x1000.

- yedek rezerv

- yedek rezerv

Bu program için yığın olarak kullanılmak üzere saklanacak bellek miktarını (ve isteğe bağlı olarak) belirtin. Varsayılan 2Mb saklıdır, 4K taahhüt edilir.

--subsystem

--subsystem hangi : büyük

--subsystem hangi : büyük . küçük

Programınızın yürüteceği alt sistemi belirtir. Yasal değerler "native", "windows", "console" ve "posix" dir. İsteğe bağlı olarak alt sistem sürümünü de ayarlayabilirsiniz.

Önemli: Komutunuzun belirli bir bilgisayarda nasıl kullanıldığını görmek için man komutunu ( % adam ) kullanın.