米榜饴 发表于 2025-6-8 22:28:53

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

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

一般来说动态库并不需要关心自己所在的文件系统上的路径,但业务有那么多总有一两个会有特殊需求。
现在给定一个动态库里的函数A,需求是要知道这个函数A是哪个动态库里的以及这个库的存放路径。
测试对象有两个,第一个是标准库的函数printf,另一个是我们自己写的动态链接库里的PrintRandomText函数。
自定义动态库的名字叫libmycustom1.so,代码和编译生成的库都存放在libmycustom1目录下。代码如下:
// 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 = {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 (length5 then            local addrParts = {}            for addr in parts:gmatch("[^%-]+") do                table.insert(addrParts, addr)            end            if #addrParts == 2 then                local startAddr = tonumber(addrParts, 16) or 0                local endAddr = tonumber(addrParts, 16) or 0                if startAddr
页: [1]
查看完整版本: Linux c 运行时获取动态库所在路径