如何让linux加载当前目录的动态库?

如何让linux加载当前目录的动态库?,第1张

linux 加载当前目录的动态库的方法是:设置合适的环境变量LD_LIBRARY_PATH。\x0d\x0a设置方法有以下三种:\x0d\x0a\x0d\x0a1、临时修改,log out之后就失效\x0d\x0a在terminal中执行:export LD_LIBRARY_PATH=./\x0d\x0a\x0d\x0a2、让当前帐号以后都优先加载当前目录的动态库\x0d\x0a修改~/.bash_profile在文件末尾加上两行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH \x0d\x0a\x0d\x0a3、让所有帐号从此都优先加载当前目录的动态库\x0d\x0a修改/etc/profile在文件末尾加上两行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH

让linux加载当前目录的动态库,设置方法有以下三种:

1、临时修改,log out之后就失效

在terminal中执行:

export LD_LIBRARY_PATH=./

2、让当前帐号以后都优先加载当前目录的动态库

修改~/.bash_profile 在文件末尾加上两行:

LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH

3、让所有帐号从此都优先加载当前目录的动态库

修改/etc/profile 在文件末尾加上两行:

LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH

在linux上,你在ps中说的那种"将动态库作为一个参数传到程序里"的使用方式,是通过dlopen函数将.so加载到当前进程中,并且通过ld.so将.so"链接"进当前进程。这个"链接"过程包括:查找未定义符号在当前进程中的地址、分配数据/代码/bss段内存(数据初始化全局变量、代码段重定位)、执行constructor函数等。之后,可以使用dlsym在已知符号名的情况下通过符号名查找符号对应的地址。这个符号可以是一个全局变量、全局函数等。在你说的C++中,重载的函数也可以理解为全局函数,会有一个属性为weak的符号。该符号的符号名如果不做修改,默认按照System V的C++ API命名规范命名(以保证linux下不同编译器编译出来的.so和.o可以通用)。但如果使用extern "C"修饰之后,变成C的函数名,则无名称修饰,便于使用。

作者:yin jie

链接:https://www.zhihu.com/question/29988788/answer/46352593

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11911850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存