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]