您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Linux常用命令ld怎么用”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Linux常用命令ld怎么用”這篇文章吧。
的一員,是 GNU 鏈接器,用于將目標(biāo)文件與庫鏈接為可執(zhí)行文件或庫文件
ld [OPTIONS] OBJFILES
ld 命令支持眾多鏈接選項(xiàng),但是大部分選項(xiàng)很少被使用,下面是 GNU ld 命令接受的選項(xiàng)。
-b 指定目標(biāo)代碼輸入文件的格式 -Bstatic 只使用靜態(tài)庫 -Bdynamic 只使用動(dòng)態(tài)庫 -Bsymbolic 把引用捆綁到共享庫中的全局符號 -c, --mri-script= 為與 MRI 鏈接器兼容,ld 接受由 MRI 命令語言編寫的腳本文件 --cref 創(chuàng)建跨引用表 -d,-dc,-dp 即使指定了可重定位的輸出文件(使用-r),也會(huì)為公共符號分配空間。腳本命令“FORCE_COMMON_ALLOCATION”具有相同的效果 -defsym 在輸出文件中創(chuàng)建指定的全局符號 -demangle 在錯(cuò)誤消息中還原符號名稱 -e 使用指定的符號作為程序的初始執(zhí)行點(diǎn) -E,--export-dynamic 對于ELF格式文件,創(chuàng)建動(dòng)態(tài)鏈接的可執(zhí)行文件時(shí),把所有符號添加到動(dòng)態(tài)符號表 -f, --auxiliary= 對于 ELF 格式共享對象,設(shè)置 DT_AUXILIARY 名稱 -F, --filter= 對于ELF格式共享對象,設(shè)置 DT_FILTER 名稱。這告訴動(dòng)態(tài)鏈接器,正在創(chuàng)建的共享對象的符號表應(yīng)該用作共享對象名稱的符號表的篩選器。 -g 被忽略。用于提供和其他工具的兼容性 -h 對于 ELF 格式共享對象,設(shè)置 DT_SONAME 名稱 -I, -dynamic-linker, --dynamic-linker= 指定動(dòng)態(tài)鏈接器。這僅在生成依賴動(dòng)態(tài)鏈接庫的 ELF 可執(zhí)行文件時(shí)才有意義。默認(rèn)的動(dòng)態(tài)鏈接器通常是正確的,除非您知道正在做什么,否則不要使用該選項(xiàng)。 -l, --library= 把指定的庫文件添加到要鏈接的文件清單 -L, --library-path=searchdir 把指定的路徑添加添加到搜索庫的目錄清單 -M, --print-map 顯示鏈接映射,用于診斷目的 -Map=: 將鏈接映射輸出到指定的文件 -m 模擬指定的鏈接器 -N,--omagic 指定讀取/寫入文本和數(shù)據(jù)段 -n,--nmagic 關(guān)閉節(jié)的頁面對齊,并禁用對共享庫的鏈接。如果輸出格式支持Unix樣式的幻數(shù),則將輸出標(biāo)記為"NMAGIC" -noinhibit-exec 生成輸出文件,即使出現(xiàn)非致命鏈接錯(cuò)誤。通常,如果鏈接器在鏈接過程中遇到錯(cuò)誤,它將不會(huì)生成輸出文件。 -no-keep-memory ld 通常在內(nèi)存中緩存輸入文件的符號表來優(yōu)化內(nèi)存使用速度。此選項(xiàng)告訴 ld 不要緩存符號表。當(dāng)鏈接大型可執(zhí)行文件時(shí),如果ld耗盡內(nèi)存空間,則可能需要使用該選項(xiàng) -O 對于非零的優(yōu)化等級,ld將優(yōu)化輸出。此操作會(huì)比較耗時(shí),應(yīng)該在生成最終的結(jié)果時(shí)使用。 -o, --output= 指定輸出文件的名稱 -oformat= 指定輸出文件的二進(jìn)制格式 -R,--just-symbols= 從指定的文件讀取符號名稱和地址 -r,--relocatable 生成可重定位的輸出(稱為部分連接) -rpath= 把指定的目錄添加到運(yùn)行時(shí)庫搜索路徑 -rpath-link= 指定搜索運(yùn)行時(shí)共享庫的目錄 -S,--strip-debug 忽略來自輸出文件的調(diào)試器符號信息 -s,--strip-all 忽略來自輸出文件的所有符號信息 -shared, -Bshareable 創(chuàng)建共享庫 -split-by-file[=size] 為每個(gè)目標(biāo)文件在輸出文件中創(chuàng)建額外的段大小達(dá)到size。size默認(rèn)為1 -split-by-reloc[=count] 按照指定的長度在輸出文件中創(chuàng)建額外的段 --section-start== 在輸出文件中指定的地址定位指定的段 -T, --script= 使用 scriptfile 作為鏈接器腳本。此腳本將替換 ld 的默認(rèn)鏈接器腳本(而不是添加到其中),因此腳本必須指定輸出文件所需的所有內(nèi)容。如果當(dāng)前目錄中不存在腳本文件,ld 會(huì)在 -L 選項(xiàng)指定的目錄中查找 -Ttext= 使用指定的地址作為文本段的起始點(diǎn) -Tdata= 使用指定的地址作為數(shù)據(jù)段的起始點(diǎn) -Tbss= 使用指定的地址作為bss段的起始點(diǎn) -t,--trace 在處理輸入文件時(shí)顯示它們的名稱 -u, --undefined= 強(qiáng)制指定符號在輸出文件中作為未定義符號 -v, -V, --version 示ld版本號 -warn-common 當(dāng)一個(gè)通用符號和另一個(gè)通用符號結(jié)合時(shí)發(fā)出警告 -warn-constructors 如果沒有使用任何全局構(gòu)造器,則發(fā)出警告 -warn-once 對于每個(gè)未定義的符號只發(fā)出一次警告 -warn-section-align 如果為了對齊而改動(dòng)了輸出段地址,則發(fā)出警告 --whole-archive 對于指定的存檔文件,在存檔中包含所有文件 -X, --discard-locals 刪除所有本地臨時(shí)符號 -x, --discard-al 刪除所有本地符號
(1)鏈接目標(biāo)文件生成可執(zhí)行文件。給定C++目標(biāo)文件test.o與main.o,生成可執(zhí)行文件test.out。
ld /usr/lib64/crt1.o /usr/lib64/crti.o /usr/lib64/crtn.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 -L/usr/lib64 -L/usr/lib -lstdc++ -lm -lgcc_s -lc -lgcc main.o test.o -o test.out
因?yàn)樯梢粋€(gè)C++可執(zhí)行文件,需要依賴很多系統(tǒng)庫和相關(guān)的目標(biāo)文件,比如C語言庫libc.a,所以使用ld進(jìn)行鏈接時(shí),需要注意添加較長的命令選項(xiàng),不然會(huì)報(bào)鏈接錯(cuò)誤。使用g++ -v命令可以查看最后一行collect2使用的命令選項(xiàng),進(jìn)而了解生成可執(zhí)行文所需的相關(guān)依賴。
g++ -v main.o test.o ... usr/libexec/gcc/x86_64-redhat-linux/4.8.5/collect2 --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib64/crt1.o /usr/lib64/crti.o /usr/lib64/crtn.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 -L/usr/lib64 -L/usr/lib -lstdc++ -lm -lgcc_s -lc -lgcc main.o test.o
以上是“Linux常用命令ld怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。