新聞中心
在Linux中,ld r是一種非常有用的命令,它允許用戶在編譯程序時(shí)指定動(dòng)態(tài)鏈接庫(kù)的位置,并在運(yùn)行時(shí)加載這些庫(kù)。這篇文章將介紹ld r的作用和用法,幫助讀者更好地了解這個(gè)命令。

1. 了解LD
在介紹ld r之前,讓我們先來(lái)了解一下LD。LD是Linux中的鏈接器,它負(fù)責(zé)將多個(gè)源文件鏈接在一起生成可執(zhí)行文件或動(dòng)態(tài)鏈接庫(kù)。在Linux中,鏈接器是由GNU binutils項(xiàng)目開(kāi)發(fā)的,而其主要功能之一就是將多個(gè)目標(biāo)文件或庫(kù)文件組合成一個(gè)可執(zhí)行文件或庫(kù)文件。
在執(zhí)行鏈接器時(shí),需要給出一些參數(shù)來(lái)指定輸入文件和輸出類型等。其中,最常用的參數(shù)是-l和-L選項(xiàng),它們可以用來(lái)指定要鏈接的庫(kù)文件和庫(kù)文件的搜索路徑。
2. ld r的作用
因?yàn)長(zhǎng)inux中使用的是共享庫(kù)模式,所以程序需要在運(yùn)行時(shí)加載共享庫(kù)才能正常運(yùn)行。而ld r命令就是用來(lái)在程序運(yùn)行時(shí)動(dòng)態(tài)地加載共享庫(kù)的。具體而言,ld r命令可以做到以下幾點(diǎn):
(1) 指定共享庫(kù)的搜索路徑:通過(guò)使用ld r命令,我們可以指定共享庫(kù)的搜索路徑,從而使程序可以正確地找到需要的共享庫(kù)。
(2) 加載共享庫(kù):在程序運(yùn)行時(shí),需要用到的共享庫(kù)將被動(dòng)態(tài)地加載到進(jìn)程的內(nèi)存空間中。
(3) 解析符號(hào):在加載共享庫(kù)時(shí),需要解析共享庫(kù)中的符號(hào),以便在程序中正確地使用這些符號(hào)。
(4) 分析和重定位ELF文件:當(dāng)ld r命令加載一個(gè)共享庫(kù)時(shí),它會(huì)對(duì)該共享庫(kù)進(jìn)行分析和重定位,以確保其符號(hào)表正確地指向需要的函數(shù)和變量。
3. ld r的用法
下面是一些常用的ld r命令選項(xiàng)及其用法:
(1) ld r LIBRARY:指定要加載的庫(kù)文件,這里的LIBRARY可以是一個(gè)庫(kù)文件名,也可以是一個(gè)包含庫(kù)文件路徑的完整路徑。例如:ld r libfoo.so.
(2) ld r-path DIR:指定共享庫(kù)的搜索路徑。例如:ld r-path /usr/local/lib.
(3) ld r-preload LIBRARY:在程序啟動(dòng)時(shí)預(yù)加載指定的共享庫(kù)。例如:ld r-preload libbar.so.
(4) ld r-symbolic:在符號(hào)解析時(shí)使用強(qiáng)制符號(hào)鏈接。這個(gè)選項(xiàng)通常用于編譯器的運(yùn)行時(shí)鏈接選項(xiàng)中。例如:ld r-symbolic.
4.
通過(guò)了解和學(xué)習(xí)linux ld -r命令,我們可以更好地掌握動(dòng)態(tài)鏈接庫(kù)的使用和加載。無(wú)論是在開(kāi)發(fā)或?qū)嶋H運(yùn)行程序中,ld r都是一個(gè)非常有用的工具。在正式使用該命令之前,在實(shí)驗(yàn)環(huán)境中多加測(cè)試和學(xué)習(xí)是非常必要的。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
linux系統(tǒng)作業(yè),求代碼過(guò)程
謝謝!
Linux內(nèi)核配置系統(tǒng)由三部組別:
?Makefile:布 Linux 內(nèi)核源代碼 Makefile定義 Linux 內(nèi)核編譯規(guī)則;
?配置文件圓哪(config.in):給用戶提供配置選擇功能;
?配置工具:包括配置命令解釋器(配置腳本使用配置命令進(jìn)行解釋)配置用戶界面(提供基于字符界面、基于 Ncurses 圖形界面及基于 Xwindows 圖形界面用戶配州孝置界面各自應(yīng)于 Make config、Make menuconfig make xconfig)
些配置工具都使用腳本語(yǔ)言 Tcl/TK、Perl 編寫(包含些用 C 編寫代碼)本文并配置系統(tǒng)本身進(jìn)行析介紹何使用配置系統(tǒng)所除非配置系統(tǒng)維護(hù)者般內(nèi)核發(fā)者須解原理需要知道何編寫 Makefile 配置文件所本文我 Makefile 配置文件進(jìn)行討論另外凡涉及與具體 CPU 體系結(jié)構(gòu)相關(guān)內(nèi)容我都 ARM 例僅討論問(wèn)題明確化且內(nèi)容本身產(chǎn)影響橘跡碼
2. Makefile
2.1 Makefile 概述
Makefile 作用根據(jù)配置情況構(gòu)造需要編譯源文件列表別編譯并目標(biāo)代碼鏈接起終形 Linux 內(nèi)核二進(jìn)制文件
由于 Linux 內(nèi)核源代碼按照樹(shù)形結(jié)構(gòu)組織所 Makefile 布目錄樹(shù)Linux 內(nèi)核 Makefile 及與 Makefile 直接相關(guān)文件:
?Makefile:頂層 Makefile整內(nèi)核配置、編譯總體控制文件
?.config:內(nèi)核配置文件包含由用戶選擇配置選項(xiàng)用存放內(nèi)核配置結(jié)( make config)
?arch/*/Makefile:位于各種 CPU 體系目錄 Makefile arch/arm/Makefile針特定平臺(tái) Makefile
?各目錄 Makefile:比 drivers/Makefile負(fù)責(zé)所目錄源代碼管理
?Rules.make:規(guī)則文件所 Makefile 使用
用戶通 make config 配置產(chǎn) .config頂層 Makefile 讀入 .config 配置選擇頂層 Makefile 兩主要任務(wù):產(chǎn) vmlinux 文件內(nèi)核模塊(module)達(dá)目頂層 Makefile 遞歸進(jìn)入內(nèi)核各目錄別調(diào)用位于些目錄 Makefile至于底進(jìn)入哪些目錄取決于內(nèi)核配置頂層 Makefile 句:include arch/$(ARCH)/Makefile包含特定 CPU 體系結(jié)構(gòu) Makefile Makefile 包含平臺(tái)相關(guān)信息
位于各目錄 Makefile 同根據(jù) .config 給配置信息構(gòu)造前配置需要源文件列表并文件 include $(TOPDIR)/Rules.make
Rules.make 文件起著非重要作用定義所 Makefile 共用編譯規(guī)則比需要本目錄所 c 程序編譯匯編代碼需要 Makefile 編譯規(guī)則:
%.s: %.c
$(CC) $(CFLAGS) -S $
目錄都同要求需要各自 Makefile 包含編譯規(guī)則比較麻煩 Linux 內(nèi)核則類編譯規(guī)則統(tǒng)放置 Rules.make 并各自 Makefile 包含進(jìn) Rules.make(include Rules.make)避免 Makefile 重復(fù)同規(guī)則于面例 Rules.make 應(yīng)規(guī)則:
%.s: %.c
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F)) $(CFLAGS_$@) -S $
2.2 Makefile 變量
頂層 Makefile 定義并向環(huán)境輸許變量各目錄 Makefile 傳遞些信息些變量比 SUBDIRS僅頂層 Makefile 定義并且賦初值且 arch/*/Makefile 作擴(kuò)充
用變量幾類:
1) 版本信息
版本信息:VERSIONPATCHLEVEL, SUBLEVEL, EXTRAVERSIONKERNELRELEASE版本信息定義前內(nèi)核版本比 VERSION=2PATCHLEVEL=4SUBLEVEL=18EXATAVERSION=-rmk7共同構(gòu)內(nèi)核發(fā)行版本KERNELRELEASE:2.4.18-rmk7
2) CPU 體系結(jié)構(gòu):ARCH
頂層 Makefile 用 ARCH 定義目標(biāo) CPU 體系結(jié)構(gòu)比 ARCH:=arm 等許目錄 Makefile 要根據(jù) ARCH 定義選擇編譯源文件列表
3) 路徑信息:TOPDIR, SUBDIRS
TOPDIR 定義 Linux 內(nèi)核源代碼所根目錄例各目錄 Makefile 通 $(TOPDIR)/Rules.make 找 Rules.make 位置
SUBDIRS 定義目錄列表編譯內(nèi)核或模塊頂層 Makefile 根據(jù) SUBDIRS 決定進(jìn)入哪些目錄SUBDIRS 值取決于內(nèi)核配置頂層 Makefile SUBDIRS 賦值 kernel drivers mm fs net ipc lib;根據(jù)內(nèi)核配置情況 arch/*/Makefile 擴(kuò)充 SUBDIRS 值參見(jiàn)4)例
4) 內(nèi)核組信息:HEAD, CORE_FILES, NETWORKS, DRIVERS, LIBS
Linux 內(nèi)核文件 vmlinux 由規(guī)則產(chǎn):
vmlinux: $(CONFIGURATION) init/main.o init/version.o linuxsubdirs
$(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o
–start-group
$(CORE_FILES)
$(DRIVERS)
$(NETWORKS)
$(LIBS)
–end-group
-o vmlinux
看vmlinux 由 HEAD、main.o、version.o、CORE_FILES、DRIVERS、NETWORKS LIBS 組些變量( HEAD)都用定義連接 vmlinux 目標(biāo)文件庫(kù)文件列表其HEADarch/*/Makefile 定義用確定先鏈接進(jìn) vmlinux 文件列表比于 ARM 系列 CPUHEAD 定義:
HEAD := arch/arm/kernel/head-$(PROCESSOR).o
arch/arm/kernel/init_task.o
表明 head-$(PROCESSOR).o init_task.o 需要先鏈接 vmlinux PROCESSOR armv 或 armo取決于目標(biāo) CPU CORE_FILESNETWORKDRIVERS LIBS 頂層 Makefile 定義并且由 arch/*/Makefile 根據(jù)需要進(jìn)行擴(kuò)充 CORE_FILES 應(yīng)著內(nèi)核核文件 kernel/kernel.omm/mm.ofs/fs.oipc/ipc.o看些組內(nèi)核重要文件同arch/arm/Makefile CORE_FILES 進(jìn)行擴(kuò)充:
# arch/arm/Makefile
# If we have a machine-specific directory, then include it in the build.
MACHDIR := arch/arm/mach-$(MACHINE)
ifeq ($(MACHDIR),$(wildcard $(MACHDIR)))
SUBDIRS += $(MACHDIR)
CORE_FILES := $(MACHDIR)/$(MACHINE).o $(CORE_FILES)
endif
HEAD := arch/arm/kernel/head-$(PROCESSOR).o
arch/arm/kernel/init_task.o
SUBDIRS += arch/arm/kernel arch/arm/mm arch/arm/lib arch/arm/nwfpe
CORE_FILES := arch/arm/kernel/kernel.o arch/arm/mm/mm.o $(CORE_FILES)
LIBS := arch/arm/lib/lib.a $(LIBS)
5) 編譯信息:CPP, CC, AS, LD, ARCFLAGSLINKFLAGS
Rules.make 定義編譯通用規(guī)則具體特定場(chǎng)合需要明確給編譯環(huán)境編譯環(huán)境變量定義針交叉編譯要求定義 CROSS_COMPILE比:
CROSS_COMPILE = arm-linux-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
……
CROSS_COMPILE 定義交叉編譯器前綴 arm-linux-表明所交叉編譯工具都 arm-linux- 所各交叉編譯器工具前都加入 $(CROSS_COMPILE)組完整交叉編譯工具文件名比 arm-linux-gcc
CFLAGS 定義傳遞給 C 編譯器參數(shù)
LINKFLAGS 鏈接 vmlinux 由鏈接器使用參數(shù)LINKFLAGS arm/*/Makefile 定義比:
# arch/arm/Makefile
LINKFLAGS :=-p -X -T arch/arm/vmlinux.lds
6) 配置變量CONFIG_*
.config 文件許配置變量等式用說(shuō)明用戶配置結(jié)例 CONFIG_MODULES=y 表明用戶選擇 Linux 內(nèi)核模塊功能
.config 頂層 Makefile 包含形許配置變量每配置變量具確定值:y 表示本編譯選項(xiàng)應(yīng)內(nèi)核代碼靜態(tài)編譯進(jìn) Linux 內(nèi)核;m 表示本編譯選項(xiàng)應(yīng)內(nèi)核代碼編譯模塊;n 表示選擇編譯選項(xiàng);根本沒(méi)選擇配置變量值空
2.3 Rules.make 變量
前面講Rules.make 編譯規(guī)則文件所 Makefile 都包括 Rules.makeRules.make 文件定義許變量重要些編譯、鏈接列表變量
O_OBL_OBOX_OBLX_OB:本目錄需要編譯進(jìn) Linux 內(nèi)核 vmlinux 目標(biāo)文件列表其 OX_OB LX_OB “X” 表明目標(biāo)文件使用 EXPORT_SYMBOL 輸符號(hào)
M_OBMX_OB:本目錄需要編譯裝載模塊目標(biāo)文件列表同MX_OB “X” 表明目標(biāo)文件使用 EXPORT_SYMBOL 輸符號(hào)
O_TARGETL_TARGET:每目錄都 O_TARGET 或 L_TARGETRules.make 首先源代碼編譯 O_OB OX_OB 所目標(biāo)文件使用 $(LD) -r 鏈接 O_TARGET 或 L_TARGETO_TARGET .o 結(jié)尾 L_TARGET .a 結(jié)尾
你網(wǎng)上隨基賣便祥鋒和搜一下Linux文件權(quán)限,主要謹(jǐn)盯是chmod,chown這兩個(gè)命令看一看就明白了!
mkdir test
touch file1
chmod o+w file1
chmod g-r file1
chmod 755 file1
chmod 400 file1
二、
chmod 744 backup.tar.gz
chmod 777 backup.tar.gz
chmod 755 backup.tar.gz
chgrp adm backup.tar.gz
chown adm backup.tar.gz
關(guān)于linux ld -r的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)-老牌IDC、云計(jì)算及IT信息化服務(wù)領(lǐng)域的服務(wù)供應(yīng)商,業(yè)務(wù)涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務(wù)、云計(jì)算服務(wù)、IT信息化、AI算力租賃平臺(tái)(智算云),軟件開(kāi)發(fā),網(wǎng)站建設(shè),咨詢熱線:028-86922220
分享文章:了解Linuxldr命令的作用和用法(linuxld-r)
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/dpddsog.html


咨詢
建站咨詢
