共享库的作用是在编程中预先编译好的代码,可以在程序中重复使用,比如一些数学函数,可以不需要自己编写,直接调用相关函数即可实现,也就是一些通用的代码,我们就不用再重复造轮子去实现。
如libc是linux 中一个标准的c库,在linux中,支持两种类型的lib库:

  1. 静态库:在编译时候,静态绑定程序
  2. 动态或共享库:在启动程序并加载到内存时加载库到内存中,并在运行时进行绑定
    共享库都是以.so结尾的文件。

linux上的共享库路径:
默认在/usr/local/lib, /usr/local/lib64, /usr/lib,/usr/lib64,系统启动的库文件在/lib,/lib64。
postgresql 共享库的路径在<install_directory>/lib下,也就是一般我们配置的环境变量$PGHOME/lib下。我们可以设置LD_LIBRARY_PATH环境变量,指定相关库的路径。

比如我一般都会这样设置

export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:

创建一个C程序共享库文件: first.so

/*创建一个共享库文件*/
gcc -shared -o first.so -fPIC first.c
/*运行可执行文件*/
gcc first.c first.so
./a.out
./a.out: error while loading shared libraries: first.so: cannot open shared object file: No such file or directory
/*必须指定位置才可运行*/
#pwd
/root
# export LD_LIBRARY_PATH=/root
./a.out
Hello! This is a test prgoram.

那么我们理解一下PG中的shared_preload_libraries参数又是什么呢?
shared_preload_libraries:在postmaster启动的时候加载,因此在fork后台进程之前,需要注册共享内存,锁,钩子程序,需要加载多个共享库,用逗号分隔。
session_preload_libraries:是在fork后台进程之后加载,不需要注册共享内存
local_preload_libraries:和session_preload_libraries类似,但是仅限于插件目录,可以由普通用户设置。
load:载入一个共享库文件.

PostgreSQL 中创建插件大多是动态库共享对象,因此执行创建插件时,共享对象会加载并调用。

根据插件的使用情况,可能需要在后postgresql.conf中添加shared_preload_libraries.

例如,pg_stat_statements必须要将其添加postgresql.conf中的shared_preload_libraries来加载,因为它需要额外的共享内存。这意味着需要重新启动数据库才能添加或删除模块。

参考:
https://www.postgresql.org/docs/13/runtime-config-client.html#RUNTIME-CONFIG-CLIENT-PRELOAD
https://www.postgresql.org/docs/13/sql-load.html
https://postgreshelp.com/shared-preload-libraries/#What_is_shared_library

如何理解shared library相关推荐

  1. 关于shared library的描述

    原文链接:https://blog.csdn.net/w_ww_w/article/details/7002880 以前搞共享库动态加载管理时找的一些资料,放在这里共享. 引言: 在xmeeting中 ...

  2. Qt学习之路(60): 创建shared library

    前段时间说了Qt一些类库的使用,今天来换一下口味,来看一下程序设计的问题.今天来说的是关于共享库 shared library. 如果你打开一些 Windows 应用程序的目录,你会发现有很多程序的 ...

  3. ImportError: Can not find the shared library: libhdfs3.so解决方案

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  4. linux下Makefile中包含有shared library动态链接库文件时候的简单例子

    如果不知道什么是makefile,可以首先看我的另一篇博客: linux下Makefile的简单例子及解释 http://www.cnblogs.com/lihaozy/archive/2012/08 ...

  5. 在Flex3中使用Runtime Shared Library (RSL)

    本文来自:http://wangcheng.iteye.com/blog/187213 在Flex Builder的flex_builder_dir/sdks/3.0.0/frameworks/rsl ...

  6. 【错误记录】Android NDK 错误排查记录 ( error: undefined reference to | Linking CXX shared library FAILED )

    文章目录 一. 报错信息 二. 错误分析 三. 错误总结 一. 报错信息 报错信息 : Build command failed. Error while executing process Y:\0 ...

  7. eclipse报错:Failed to load the JNI shared library

    Eclipse运行时提示"Failed to load the JNI shared library /Java/jre6/bin/client/jvm.dll"的一个解决方案 因 ...

  8. 【已解决】运行Eclipse出错:Failed toload the JNI shared library

    [已解决]运行Eclipse出错:Failed toload the JNI shared library [问题] 运行Android的ADT,即Eclipse出错: Failed to load ...

  9. ffmpeg for android shared library

    ffmpeg for android shared library This comes from my github README 移植ffmpeg到android,编译可用于jni调用的so库. ...

最新文章

  1. 【组队学习】【23期】Datawhale编程实践(区块链)
  2. xp里删除不想要的删不掉的帐户
  3. Oracle12c多租户如何启动关闭CDB或PDB (PDB自动启动)
  4. 注册DirectShow filter时应该注意中文路径
  5. oracle一行变一列,oracle多行变一行
  6. python文件数据总和计算_python 计算文件夹里所有内容的大小总和
  7. kubernetes cpu限制参数说明
  8. 变成小白的第一本Python入门书,第五章循环与判断课后题答案
  9. 冒泡排序代码_凡人能看懂的冒泡排序和快速排序(附动态图和代码详解))
  10. 如何设置 Web 服务器的权限之iis
  11. 阿里消息中间件ONS消息乱序问题(二)
  12. dw1820网卡支持linux吗,黑苹果驱动DW1820A无线网卡教程
  13. android 动画方式,Android动画实现方式的汇总
  14. 蓝桥杯 -罗马数字问题
  15. 关于Python中的编程,这篇阅读量预算10万+的文章可能是你见过的最完整的讲解
  16. 有别于普通专线的BGP线路
  17. [架构之路-32]:目标系统 - 系统软件 - Linux OS用户空间程序的启动、关闭、监管 -- init进程
  18. kityminder百度脑图转xmind
  19. 平分肥宅快乐水(C++)
  20. 我是怎样用这个神器搞定我的4T电影的

热门文章

  1. 华为机试--高精度整数加法
  2. qq分享和空间分享弹出对话框或Popu…
  3. Internet of things:是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置
  4. 详解线性回归算法的纯Python实现
  5. 字体的故事之:Arial 无处不在
  6. 美国杜克大学计算机专业世界排名,美国杜克大学全美排名
  7. H5IOSAndroid-入坑指南
  8. android登陆界面设计方案,011android初级篇之android登录界面的设计
  9. Others9_无线路由器说说2.4G和5G Wi-Fi的区别
  10. 问mysql数据库varchar(50),能存多少个中文字。 ---浅谈字符与字节的区别