Linux下可执行文件指定运行时库(.so文件)路径

rpath是Linux系统中控制可执行文件寻找动态链接库路径的机制。通过-Wl,--disable-new-dtags,-rpath,./这样的编译选项,可以确保程序运行时首先在当前目录查找.so文件。在Makefile中,可以修改CFLAGS和LDFLAGS来实现这一配置。
摘要由CSDN通过智能技术生成

rpath 全称是run-time search path,规定了Linux下可执行文件在寻找.so文件时的第一优先位置。比如我们想要指定可执行文件运行优先在当前目录下寻找.so 文件,则使用gcc/g++编译时加上以下选项:

-Wl,--disable-new-dtags,-rpath,./

其中-Wl参数用来将GCC的命令行参数传递给ld命令。

--disable-new-dtags表示使用的是rpath,去掉后编译器默认使用runpath。

如果是在Makefile中则指定如下:

CFLAGS = XXX
LDFLAGS = -Wl,--disable-new-dtags,-rpath,./
OBJS = $(patsubst %.cpp, %.o, $(SRCS))

$(TARGET):$(OBJS)
	$(CXX) $^ -o $(TARGETDIR)$(TARGET) $(LIBDIR) $(DLLLIBS) $(LDFLAGS)

$(OBJS):%.o:%.cpp
	$(CXX) $(CFLAGS) $(DEFS) $(INCDIR) $< -c -o $@
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 操作系统中,可执行文件通常有以下几种类型: 1. **ASCII 文件**:虽然这些文件扩展名为 `.txt` 或 `.sh`,但它们实际上是脚本文件,如 shell 脚本(bash、zsh等)或 Perl、Python 等解释型语言的源代码。通过添加执行权限(chmod +x),用户可以运行这些文件。 2. **ELF (Executable and Linkable Format)**:这是 Linux/Unix 系统中通用的可执行文件格式,包括动态链接 (.so) 和可执行程序 (.exe)。比如 `.bin`, `.exe`, `.elf`, `.dylib` 等。ELF 文件分为三种类型:可执行文件(ELF executable, Eexec)、共享对象文件(ELF shared object, Eshared)和核心文件(ELF core dump, Ecore)。 3. **静态二进制文件**:`.a` 扩展名表示静态(static library),包含已编译和链接的代码。直接包含所有依赖的机器代码,无需加载器查找动态链接。 4. **动态二进制文件**:`.so` 或 `.dll` 表示动态链接(dynamic link library),在运行时通过动态链接机制加载到内存中,节省空间但可能需要外部支持。 5. **特殊文件**:有些文件虽然没有 `.exe` 或 `.sh` 等常规扩展名,但通过 `#!/bin/bash` 或其他路径声明可执行,如 `.bat` 在某些 Linux 发行版中被视为脚本文件。 6. **Shell脚本**:`.bash`, `.zsh`, `.csh`, 等扩展名的文件,在Linux中可通过 `shebang`(#!/bin/bash)标记作为可执行文件。 7. **容器镜像文件**:如 Docker 映射的 `.tar` 文件,可以通过 `docker run` 命令执行。 相关问题-- 1. Linux 中,ELF 文件有哪些类型? 2. 静态和动态的区别是什么? 3. 如何识别一个文件是否为可执行文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值