了解Linux ld r命令的作用和用法 (linux ld -r)

在Linux中,ld r是一种非常有用的命令,它允许用户在编译程序时指定动态链接库的位置,并在运行时加载这些库。这篇文章将介绍ld r的作用和用法,帮助读者更好地了解这个命令。

1. 了解LD

在介绍ld r之前,让我们先来了解一下LD。LD是Linux中的链接器,它负责将多个源文件链接在一起生成可执行文件或动态链接库。在Linux中,链接器是由GNU binutils项目开发的,而其主要功能之一就是将多个目标文件或库文件组合成一个可执行文件或库文件。

在执行链接器时,需要给出一些参数来指定输入文件和输出类型等。其中,最常用的参数是-l和-L选项,它们可以用来指定要链接的库文件和库文件的搜索路径。

2. ld r的作用

因为Linux中使用的是共享库模式,所以程序需要在运行时加载共享库才能正常运行。而ld r命令就是用来在程序运行时动态地加载共享库的。具体而言,ld r命令可以做到以下几点:

(1) 指定共享库的搜索路径:通过使用ld r命令,我们可以指定共享库的搜索路径,从而使程序可以正确地找到需要的共享库。

(2) 加载共享库:在程序运行时,需要用到的共享库将被动态地加载到进程的内存空间中。

(3) 解析符号:在加载共享库时,需要解析共享库中的符号,以便在程序中正确地使用这些符号。

(4) 分析和重定位ELF文件:当ld r命令加载一个共享库时,它会对该共享库进行分析和重定位,以确保其符号表正确地指向需要的函数和变量。

3. ld r的用法

下面是一些常用的ld r命令选项及其用法:

(1) ld r LIBRARY:指定要加载的库文件,这里的LIBRARY可以是一个库文件名,也可以是一个包含库文件路径的完整路径。例如:ld r libfoo.so.

(2) ld r-path DIR:指定共享库的搜索路径。例如:ld r-path /usr/local/lib.

(3) ld r-preload LIBRARY:在程序启动时预加载指定的共享库。例如:ld r-preload libbar.so.

(4) ld r-symbolic:在符号解析时使用强制符号链接。这个选项通常用于编译器的运行时链接选项中。例如:ld r-symbolic.

4.

通过了解和学习Linux ld r命令,我们可以更好地掌握动态链接库的使用和加载。无论是在开发或实际运行程序中,ld r都是一个非常有用的工具。在正式使用该命令之前,在实验环境中多加测试和学习是非常必要的。

相关问题拓展阅读:

linux系统作业,求代码过程

谢谢!

Linux内核配置系统由三部组别:

?Makefile:布 Linux 内核源代码 Makefile定义 Linux 内核编译规则;

?配置文件圆哪(config.in):给用户提供配置选择功能;

?配置工具:包括配置命令解释器(配置脚本使用配置命令进行解释)配置用户界面(提供基于字符界面、基于 Ncurses 图形界面及基于 Xwindows 图形界面用户配州孝置界面各自应于 Make config、Make menuconfig make xconfig)

些配置工具都使用脚本语言 Tcl/TK、Perl 编写(包含些用 C 编写代码)本文并配置系统本身进行析介绍何使用配置系统所除非配置系统维护者般内核发者须解原理需要知道何编写 Makefile 配置文件所本文我 Makefile 配置文件进行讨论另外凡涉及与具体 CPU 体系结构相关内容我都 ARM 例仅讨论问题明确化且内容本身产影响橘迹码

2. Makefile

2.1 Makefile 概述

Makefile 作用根据配置情况构造需要编译源文件列表别编译并目标代码链接起终形 Linux 内核二进制文件

由于 Linux 内核源代码按照树形结构组织所 Makefile 布目录树Linux 内核 Makefile 及与 Makefile 直接相关文件:

?Makefile:顶层 Makefile整内核配置、编译总体控制文件

?.config:内核配置文件包含由用户选择配置选项用存放内核配置结( make config)

?arch/*/Makefile:位于各种 CPU 体系目录 Makefile arch/arm/Makefile针特定平台 Makefile

?各目录 Makefile:比 drivers/Makefile负责所目录源代码管理

?Rules.make:规则文件所 Makefile 使用

用户通 make config 配置产 .config顶层 Makefile 读入 .config 配置选择顶层 Makefile 两主要任务:产 vmlinux 文件内核模块(module)达目顶层 Makefile 递归进入内核各目录别调用位于些目录 Makefile至于底进入哪些目录取决于内核配置顶层 Makefile 句:include arch/$(ARCH)/Makefile包含特定 CPU 体系结构 Makefile Makefile 包含平台相关信息

位于各目录 Makefile 同根据 .config 给配置信息构造前配置需要源文件列表并文件 include $(TOPDIR)/Rules.make

Rules.make 文件起着非重要作用定义所 Makefile 共用编译规则比需要本目录所 c 程序编译汇编代码需要 Makefile 编译规则:

%.s: %.c

$(CC) $(CFLAGS) -S $

目录都同要求需要各自 Makefile 包含编译规则比较麻烦 Linux 内核则类编译规则统放置 Rules.make 并各自 Makefile 包含进 Rules.make(include Rules.make)避免 Makefile 重复同规则于面例 Rules.make 应规则:

%.s: %.c

$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F)) $(CFLAGS_$@) -S $

2.2 Makefile 变量

顶层 Makefile 定义并向环境输许变量各目录 Makefile 传递些信息些变量比 SUBDIRS仅顶层 Makefile 定义并且赋初值且 arch/*/Makefile 作扩充

用变量几类:

1) 版本信息

版本信息:VERSIONPATCHLEVEL, SUBLEVEL, EXTRAVERSIONKERNELRELEASE版本信息定义前内核版本比 VERSION=2PATCHLEVEL=4SUBLEVEL=18EXATAVERSION=-rmk7共同构内核发行版本KERNELRELEASE:2.4.18-rmk7

2) CPU 体系结构:ARCH

顶层 Makefile 用 ARCH 定义目标 CPU 体系结构比 ARCH:=arm 等许目录 Makefile 要根据 ARCH 定义选择编译源文件列表

3) 路径信息:TOPDIR, SUBDIRS

TOPDIR 定义 Linux 内核源代码所根目录例各目录 Makefile 通 $(TOPDIR)/Rules.make 找 Rules.make 位置

SUBDIRS 定义目录列表编译内核或模块顶层 Makefile 根据 SUBDIRS 决定进入哪些目录SUBDIRS 值取决于内核配置顶层 Makefile SUBDIRS 赋值 kernel drivers mm fs net ipc lib;根据内核配置情况 arch/*/Makefile 扩充 SUBDIRS 值参见4)例

4) 内核组信息:HEAD, CORE_FILES, NETWORKS, DRIVERS, LIBS

Linux 内核文件 vmlinux 由规则产:

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 目标文件库文件列表其HEADarch/*/Makefile 定义用确定先链接进 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取决于目标 CPU CORE_FILESNETWORKDRIVERS LIBS 顶层 Makefile 定义并且由 arch/*/Makefile 根据需要进行扩充 CORE_FILES 应着内核核文件 kernel/kernel.omm/mm.ofs/fs.oipc/ipc.o看些组内核重要文件同arch/arm/Makefile CORE_FILES 进行扩充:

# 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 定义编译通用规则具体特定场合需要明确给编译环境编译环境变量定义针交叉编译要求定义 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 编译器参数

LINKFLAGS 链接 vmlinux 由链接器使用参数LINKFLAGS arm/*/Makefile 定义比:

# arch/arm/Makefile

LINKFLAGS :=-p -X -T arch/arm/vmlinux.lds

6) 配置变量CONFIG_*

.config 文件许配置变量等式用说明用户配置结例 CONFIG_MODULES=y 表明用户选择 Linux 内核模块功能

.config 顶层 Makefile 包含形许配置变量每配置变量具确定值:y 表示本编译选项应内核代码静态编译进 Linux 内核;m 表示本编译选项应内核代码编译模块;n 表示选择编译选项;根本没选择配置变量值空

2.3 Rules.make 变量

前面讲Rules.make 编译规则文件所 Makefile 都包括 Rules.makeRules.make 文件定义许变量重要些编译、链接列表变量

O_OBL_OBOX_OBLX_OB:本目录需要编译进 Linux 内核 vmlinux 目标文件列表其 OX_OB LX_OB “X” 表明目标文件使用 EXPORT_SYMBOL 输符号

M_OBMX_OB:本目录需要编译装载模块目标文件列表同MX_OB “X” 表明目标文件使用 EXPORT_SYMBOL 输符号

O_TARGETL_TARGET:每目录都 O_TARGET 或 L_TARGETRules.make 首先源代码编译 O_OB OX_OB 所目标文件使用 $(LD) -r 链接 O_TARGET 或 L_TARGETO_TARGET .o 结尾 L_TARGET .a 结尾

你网上随基卖便祥锋和搜一下Linux文件权限,主要谨盯是chmod,chown这两个命令看一看就明白了!

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

关于linux ld -r的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 了解Linux ld r命令的作用和用法 (linux ld -r)