libmysqlclient.so.15: cannot open shared object file: No such file or directory

2023-10-27

分类: mysql服务器管理优化 2009-06-02 16:11  26769人阅读  评论(4)  收藏  举报

原贴:http://soho-schubert.blogspot.com/2007/08/linux.html

Linux编程使用库

昨天写了一小段测试MySQL的C代码,编译顺利,但运行时报告找不到库,系统是FC4,MySQL是直接下载的Binary:
# gcc test_mysql.c -o test_mysql -L/usr/local/mysql/lib -lmysqlclient
#./test_mysql: error while loading shared libraries:
libmysqlclient.so.15: cannot open shared object file: No such file or directory

虽然知道这一定是系统没有找到加载libmysqlclient.so库的路径,并且可以把libmysqlclient.so.15 copy到/usr/lib解决,但不知道该原理和更好的方法。于是重看GUN/Linux编程指南(Kurt Wall)第10章,答案如下。

运行时使用非标准位置/usr/lib和/lib下的库的方式有三种:
(1) 设置$LD_LIBRARY_PATH=库所在目录(多个目录用:分隔),系统加载工具ld.so/ld-linux.so将顺序搜索变量指定的目录。例如#$LD_LIBRARY_PATH=/usr/local/mysql/lib ./test_mysql
(2) 以root身份把库路径加入/etc/ld.so.conf或在/etc/ld.so.conf.d中创建特定的.conf文件,然后运行ldconfig更新/etc/ld.so.cache。例如:在/etc/ld.so.conf.d下创建文件mysql.conf写入/usr/local/mysql/lib
(3) 另一种办法就是把需要的库copy到/usr/lib或/lib,但这不是建议的方法,特别是尽量避免copy发到/lib。但这种方法可以在编译时免去用-L选项。

共享库搜索顺序一般是$LDLIBRARY_PATH,/etc/ld.so.cache, /usr/lib, /lib

========
另外,顺便温习了一下其它和库相关的基础知识:

库的目的是代码重用,提供共用的功能,某个程序为别的程序提供公开的接口等。

命名和编号:
(1) 所有库名以lib开头,gcc在-l指定的文件名前自动插入lib,如libmysqlclient就用-lmysqlclient
(2) .a是静态库(archive),如 libmysqlclient.a
(3) .so是共享库(shared object),如libmysqlclient.so
(4) 编号格式:library_name.major_num.minor_num.patch_num,如libmysqlclient.so.15.0.0
(5) _g和_p: /usr/lib/libform_g.a 中的_g表示这是libform.a的调试库,用locate _g.a会发现很多类似的库,但我用locate _g.so没有发现FC4有此类库;libxxx_p.a中的_p表示这是libxxx.a的性能分析库(profiling),但我用locate _p.a和locate _p.so没有发现FC4有此类路库。

库要和接口头文件配合使用,常见的库如:
libc.so (不需头文件) 标准C库
libdl.so (dlfcn.h) 让程序在运行是加载和使用库代码,而不在编译时链接库
libglib.so (glib.h) Glib工具函数,例如hash, string等
libgthread.so (glib.h) 对Glib的线程支持
libm.so (math.h) 标准C数学库
libpthread.so (pthread.h) POSIX标准Linux线程库
libz.so (zlib.h) 通用压缩程序库

库操作命令:
(1) nm 列出目标文件或二进制文件的所有符号
(2) ar 创建静态库和符号索引
(3) ldd 列出程序正常运行所需要的共享库,例如
# ldd test_mysql
linux-gate.so.1 => (0x00c59000)
libmysqlclient.so.15 => /lib/libmysqlclient.so.15 (0x009a1000)
libc.so.6 => /lib/libc.so.6 (0x0038b000)
libpthread.so.0 => /lib/libpthread.so.0 (0x004f8000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x002f0000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00320000)
libm.so.6 => /lib/libm.so.6 (0x004bd000)
/lib/ld-linux.so.2 (0x0036d000)
(4) ldconfig 和动态链接和装载工具ld.so/ld-linux.so一起决定位于/usr/lib和/lib下的so库所需的链接。ldconfig创建一个从实际库到so库名的符号链接。注意/etc/ld.so.cache, /etc/ld.so.conf ldconfig -p列出/etc/ld.so.cache内的库对照链接。

环境变量:
动态链接器ld.so/ld-linux.so使用一些环境变量:
$LDLIBRARY_PATH : 格式类似$PATH,:分隔,非标准位置/usr/lib和/lib下的库或者/etc/ld.so.cache中没有的库,需要加入该变量才能被搜索到。
$LD_PRELOAD: 空格分隔,定义需要在最前面加载的库。也可以由/etc/ld.so.preload文件代替

静态库和共享库都是包含object文件的文件。

建立和使用静态库:
(1) 把代码编译成目标文件,如gcc -c libxxx.c -o libxxx.o
(2) ar: ar -rcs linxxx.a linxxx.o
(3) gcc -static: gcc test.c -o test -static -L. -lxxx
(4) 用file检查静态链接的可执行文件
(5) 用nm检查符号,静态链接没有未定义符号

共享库占用系统资源少(磁盘和内存),运行时根据共享链接从单个文件加载,速度快,维护方便。在运行时,ld.so/ld-linux.so把二进制文件中的符号名链接到适当的so库上。

建立和使用共享库:
(1) gcc -fPIC 产生与位置无关的代码,如gcc -fPIC -g -c libxxx.c -o libxxx.o
(2) gcc -shared和-soname,如gcc -g -shared -Wl,–soname, -libxxx.so -o libxxx.so.1.0.0 libxxx.o (注意-Wl,–soname, -libxxx.so 中间没有空格)
(3) gcc -Wl 把参数传递给链接器ld
(4) gcc -l显式链接C库

编译时指定非标准位置/usr/lib和/lib下的库的方式是用-L库目录指定。
发贴者 Schubert Bobo  时间: 8/12/2007 03:02:00 下午   
标签: Linux程序开发
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

libmysqlclient.so.15: cannot open shared object file: No such file or directory 的相关文章

  • iPhone,sqlite3,如何尽可能用几行代码确定一个表是否已经存在?

    在开始再次向表添加数据之前 如何以尽可能少的代码行确定表中已经存在 如果直接使用sqlite 可以使用以下查询来查看表是否已经存在 SELECT name FROM sqlite master WHERE type table AND na
  • 如何获取列名列表

    是否可以像这样获取包含表的所有列名的行 id foo bar age street address 我不喜欢用Pragma table info bla SELECT sql FROM sqlite master WHERE tbl nam
  • tweepy 流到 sqlite 数据库 - 语法错误[重复]

    这个问题在这里已经有答案了 可能的重复 tweepy 流到 sqlite 数据库 语法无效 https stackoverflow com questions 9434205 tweepy stream to sqlite database
  • 从哪里开始阅读 SQLite 源代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想了解sqlite是如何实现的 并且 想阅读源代码 我已经下载了源代码 我应该开始查看代码的哪一部分 SQLite文档页 http
  • 将数据库(例如 sqlite)与 cocos2d-x 一起使用

    我开始在 iPhone 上构建游戏应用程序 我正在使用 cocos2d x 游戏引擎 因为它很容易从那里移植到 Android 而且编码是用我非常熟悉的C 编写的 我想知道是否有办法在 cocos2d x 中使用任何数据库 虽然sqlite
  • 在 sqlite 数据库中以 BLOB 形式存储的图像的最大大小是多少?

    我将图像作为 BLOB 存储在 sqlite 数据库中 谁能告诉我在 sqlite 数据库中以 BLOB 形式存储的图像的最大大小 See the SQLite 的限制 https www sqlite org limits html SQ
  • 在插入 SQLite 之前检查表 B 中的日期是否在表 A 中的日期之间

    我有一个名为 项目 的表 其中包含开始日期和结束日期 我还有一个名为 Plan 的表 它有自己的开始日期和结束日期列 但我通过某种方式验证计划开始 结束日期是否在匹配的项目开始 结束日期之间 我不知道在创建表或向计划表中插入行时添加检查是否
  • 读取 chrome 历史记录时出现数据库文件锁定错误 C#

    我正在开发一个应用程序 它需要 chrome 浏览器历史记录 我编写了一段 C 代码来获取历史记录 但是 我的代码中有两个问题我无法弄清楚 有这个警告 警告 1 正在构建的项目 MSIL 的处理器架构与参考 System Data SQLi
  • Android 内容提供商更新某些列

    我正在尝试制作一个 Android 应用程序来确定完成任务还剩多少时间 我遵循了Vogella的教程 特别是这一部分http www vogella com articles AndroidSQLite article html todo
  • 如何在 sqlite3 数据库中存储音频文件并在 iphone 中播放它们?

    我想在数据库中存储音频文件 任何支持 mp3 wav 和 iphone 的格式 并在 iPhone 上播放它们 知道如何做到这一点吗 我不知道为什么你想将音频文件存储在 SQL 数据库中 但 sqlite3 支持 BLOB 因此 将它们存储
  • SQLite 更新很多行非常慢

    我相信我已经使用了很多方法来加速许多行的更新 但到目前为止没有任何帮助 我们正在开立交易 像这样 private SQLiteTransaction BeginTransaction SQLiteConnection connection
  • iOS7 后台同步

    我们必须开发一个应用程序 无论该应用程序是在前台还是在后台 都支持在某个时间间隔进行数据同步操作 我想知道在iOS7中 当应用程序在后台运行时 是否可以同步数据 即调用网络服务 我们可以在应用程序处于后台时访问 SQLite 数据库文件 我
  • SQL 内连接两个具有相同列名的表

    我有两个表 其列数不同 我不知道有多少列或名称是什么 例如表 A 和表 B TableA ID B ID variable TableB ID variable Query SELECT TableA TableB FROM TableA
  • Flask 管理数据库连接:内存:

    我有一个烧瓶应用程序 需要存储请求中的一些信息 这些信息的生命周期非常短暂 如果服务器重新启动 我就不再需要它了 所以我真的不需要持久性 我读过了here https stackoverflow com questions 11113903
  • SQL - 我需要将总值划分为另一个表中的多行

    假设我在 SQL Server 2008 中有以下表 学校桌 School Id Course Id Total Students 1 Acct101 150 1 Acct102 100 2 Acct101 110 2 Acct102 13
  • 如何使用 Sqlite3 用列表中的值更新整个列

    我有一个数据集本地存储在 sqlite3 数据库中 我提取了一列 执行了一些操作 现在想要替换数据库列中的所有值 我怎样才能做到这一点 保证列和列表的长度相同 我只想用新值更新表 有没有一种简单的方法可以一次性完成这一切 使用Python
  • SQLite创建连接时出现异常

    我在创建连接时收到 SQLite 异常 这在我安装 VS2015 RTM 之前有效 客户端 PCL databaseConnection DependencyService Get
  • 更改迁移中的自动​​增量值(PostgreSQL 和 SQLite3)

    我有一个托管在 Heroku 上的项目 想要更改表的自动增量起始值 我在本地使用 SQLite3 Heroku 使用 PostgreSQL 这是我在迁移中所拥有的 class CreateMytable lt ActiveRecord Mi
  • 如何在 SQLite 中将时间戳转换为字符串?

    我有一个表 其中存储了时间戳 以毫秒为单位 我想将这些时间戳转换为人类可读的形式 这是我的表的输出示例 SELECT date raw strftime d m Y date 1000 as string FROM my table raw
  • 尝试将 SQLite DB 从数据复制到 SD 卡

    我正在使用以下代码 该代码发布在 Stack Overflow 上的某个位置 并根据我的目的进行了修改 try File sd Environment getExternalStorageDirectory File data Enviro

随机推荐

  • 大龄单身,这些人真作。

    大家好 我是北妈 0 前些天想办法给一亲戚弟弟介绍个妹子 弟29 妹子28 两人基本恋爱0经验 皇帝不急太监急 今天两人见面 随问之 弟弟答曰 还可以 就是不知说啥 妹子答曰 还可以 到感觉不太合适 感觉不太爱说话 自己就不太爱说话 想找一
  • 关联分析——关联规则应用及案例

    数据挖掘最早使用的方法是关联分析 主要应用于零售业 其中最有名的是售货 篮分析 帮助售货商制定销售策略 数据挖掘是从海量的数据里寻找有价值的信息和数据 数据挖掘中常用的算法有 关联规则分析法 解决事件之间的关联问题 决策树分类法 对数据 和
  • 大数据--python远程连接Hive

    步骤 启动metastore 启动hiveserver2 使用beeline进行连接测试 查看地址等是否能够成功连接 确认无误可以跳过 使用python连接hive 粗暴的文件配置以及完整操作见文末 一 启动hiveserver2 1 配置
  • springboot应用无故停止运行killed解决方法

    最近使用springboot开发了一个ip代理的程序 今天放到阿里云服务器上运行 多次出现应用运行突然停止的问题 使用free h 查看内存使用完全正常 重新运行监视CPU使用也正常 没有出现堆内存溢出 栈内存异常 内存异常等信息 百思不得
  • 电力系统故障分类数据生成模型(基于simulink仿真批量生成故障数据)

    电力系统是发电 输电 配电和利用系统的组合 简而言之 电力系统是任何电气系统的心脏 在电力系统中 故障或故障电流是任何异常电流 由于此类故障 整个系统可能会损坏并最终崩溃 这项工作的目的是将故障自动分类为 11 个故障类别之一 其中包括平衡
  • 彻底弄懂二叉树的先序、中序、后序三种遍历与做题

    最近有同学考计算机二级不懂树遍历的计算 就找上我解惑 作为老好人的博主的我 但是义不容辞的上来阐述了一番 先来官方的概念 树的遍历 是指对树中所有结点信息的访问 即依次对树中每个结点的访问一次且仅访问一次 分为 先序遍历 后序遍历 层次遍历
  • java ip地址转数字,java版ip地址与整数的互相转换

    在工作中可能会遇到将ip地址转为long型的整数 或者将十进制整数转换为ip地址的情况 下面介绍一种转换的方法 一 将ip地址转成long数值 将IP地址转化成整数的方法如下 1 通过String的split方法按 分隔得到4个长度的数组
  • 被骗几十万总结出来的Ddos攻击防护经验!

    转载地址 http www ijiandao com safe cto 15952 html 本人从事网络安全行业20年 有15年防ddos攻击防护经验 被骗了很多回 都说能防300G 500G 买完就防不住了 本文当然重点给大家说明 dd
  • Flask4:methods=[‘POST‘, ‘GET‘]

    从服务器上获取数据 用GET请求 前端把数据发给服务器 用POST请求 在 app route上 添加methods参数 这个参数是一个列表类型 可以传递多个 右键页面 检查 中
  • Vue3/ Vue3 和 Vue2 生命周期函数不同点 总结、Vue2 和 Vue3 里面父组件的生命周期顺序

    一 Vue3 x 和 Vue2 x 生命周期函数不同点 总结 Vue2 vue3 beforeCreate gt setup 开始创建组件之前执行 created gt setup 开始创建组件之前执行 beforeMount gt onB
  • 【满分】【华为OD机试真题2023 JS】简单的解压缩算法

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 简单的解压缩算法 知识点栈 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 现需要实现一种算法 能将一组压缩字符串还原成原始字符串 还原规则如下 1 字符后面加数
  • 高并发短信平台实现

    01 短信介绍 在项目介绍的时候 已经定义了austin项目的核心功能 发送消息 我认为 短信是在一整个消息推送平台里最重要的一个消息类型了 毕竟关联了很多重要的业务场景 想想我们日常使用APP时的场景 验证码 登录注册 支付等等重要场景
  • matplotlib 绘制Sigmoid函数,Tanh函数,ReLU函数

    import numpy as np import matplotlib pyplot as plt def sigmoid x return 1 1 np exp x def tanh x return np exp x np exp x
  • python global函数用法及常用的 global函数代码

    Python中的 global函数是用于在程序中定义变量的函数 在我们实际的开发中 我们可能会用到 global函数来定义变量 但是我们在这里就不具体介绍它的用法了 global函数定义变量的方法 global函数使用参数a来指定变量在程序
  • 外卖点餐系统小程序 PHP+UniAPP

    一 介绍 本项目是给某大学餐厅开发的外面点餐系统 该项目针对校内的学生 配送由学校的学生负责配送 因此 该项目不同于互联网的外卖点餐系统 该系统支持属于 Saas 系统 由平台端 商家端 用户端 以及配送端组成 其中 平台端 商家端是由基于
  • 520七夕表白,还不懂浪漫?4套代码教会你如何深情表白【建议收藏】❤️

    马上又到了脱单的黄金时刻 七夕啦 如果你有喜欢的女孩子 一定要趁着这个时候把喜欢说出口 但是该不会还有人表白在学校的操场上摆着爱心蜡烛抱一束花喊一堆人来围观吧 No 请你立刻马上放弃这个计划 毫无心意不说 对于女孩子来说是真的很社死啊 PS
  • linux 查看java安装目录

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 获取java安装路径前要判断是否已经安装成功java 执行命令 java 1 U
  • 清晰图解,一图看懂图卷积GCN、时空图卷积ST-GCN

    目录 1 前言 2 普通卷积与图卷积 2 1 普通卷积 2 2 图卷积 3 ST GCN图卷积的代码解读 4 图卷积的缺陷 5 参考文献 6 联系方式 1 前言 本文为我阅读论文 Spatial Temporal Graph Convolu
  • 微信小程序API~GET

    框架提供丰富的微信原生API 可以方便的调起微信提供的能力 如获取用户信息 本地存储 支付功能等 1 wx on 开头的 API 是监听某个事件发生的API接口 接受一个 CALLBACK 函数作为参数 当该事件触发时 会调用 CALLBA
  • libmysqlclient.so.15: cannot open shared object file: No such file or directory

    libmysqlclient so 15 cannot open shared object file No such file or directory 分类 mysql服务器管理优化 2009 06 02 16 11 26769人阅读