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