找回密码
 立即注册
首页 业界区 业界 Linux c 运行时获取动态库所在路径

Linux c 运行时获取动态库所在路径

米榜饴 2025-6-8 22:28:53
记录一下如何在Linux环境下运行时获取动态库路径。
只讨论Linux amd64和arm64环境,因为使用的办法都是平台相关的不具备可移植性。
准备

一般来说动态库并不需要关心自己所在的文件系统上的路径,但业务有那么多总有一两个会有特殊需求。
现在给定一个动态库里的函数A,需求是要知道这个函数A是哪个动态库里的以及这个库的存放路径。
测试对象有两个,第一个是标准库的函数printf,另一个是我们自己写的动态链接库里的PrintRandomText函数。
自定义动态库的名字叫libmycustom1.so,代码和编译生成的库都存放在libmycustom1目录下。代码如下:
[code]// lib.h#pragma once#include #include void PrintRandomText(ssize_t length);// lib.c#include #include "lib.h"void PrintRandomText(ssize_t length){    unsigned char buff[64] = {0};    length = (length + 1) / 2;    if (length == 0) {        return;    }    while (1) {        ssize_t count = getrandom(buff, 64, 0);        count = length > count ? count : length;        for (ssize_t i = 0; i < count; ++i) {            printf("%02X", buff&0xff);        }        if (length  5 then            local addrParts = {}            for addr in parts[1]:gmatch("[^%-]+") do                table.insert(addrParts, addr)            end            if #addrParts == 2 then                local startAddr = tonumber(addrParts[1], 16) or 0                local endAddr = tonumber(addrParts[2], 16) or 0                if startAddr
您需要登录后才可以回帖 登录 | 立即注册