/usr/bin/ld: warning: **libmysqlclient.so.20**, needed by //usr/

举报
振华OPPO 发表于 2022/11/30 20:31:53 2022/11/30
【摘要】 报错信息/usr/bin/ld: warning: libmysqlclient.so.20, needed by //usr/lib/libgdal.so.20, not found (try using -rpath or -rpath-link)//usr/lib/libgdal.so.20:对‘mysql_store_result@libmysqlclient_20.0’未定义的引用...
报错信息

/usr/bin/ld: warning: libmysqlclient.so.20, needed by //usr/lib/libgdal.so.20, not found (try using -rpath or -rpath-link)
//usr/lib/libgdal.so.20:对‘mysql_store_result@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_affected_rows@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_insert_id@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_server_init@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_free_result@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_num_fields@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_field_count@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_real_connect@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_server_end@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_errno@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_use_result@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_fetch_lengths@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_close@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_options@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_init@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_field_seek@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_query@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_fetch_field@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_error@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_num_rows@libmysqlclient_20.0’未定义的引用
//usr/lib/libgdal.so.20:对‘mysql_fetch_row@libmysqlclient_20.0’未定义的引用
collect2: error: ld returned 1 exit status
line_det/CMakeFiles/line.dir/build.make:167: recipe for target ‘/home/dzh/Demo/line_det/devel/lib/line_det/line’ failed
make[2]: *** [/home/dzh/Demo/line_det/devel/lib/line_det/line] Error 1
CMakeFiles/Makefile2:455: recipe for target ‘line_det/CMakeFiles/line.dir/all’ failed
make[1]: *** [line_det/CMakeFiles/line.dir/all] Error 2
Makefile:140: recipe for target ‘all’ failed
make: *** [all] Error 2
Invoking “make -j12 -l12” failed
终端进程“bash ‘-c’, ‘catkin_make’”已终止,退出代码: 1。

解决方法

经过了一下午3h的摸索,终于解决了以上问题,总结一下让后面的同学少走弯路吧。
报错原因是因为系统找不到libmysqlclient.so.20这个库。

1、那么我们先在Ubuntu系统中查找一下本地是否有这个文件。
输入find / -name libmysqlclient.so.20。如果有的话会在/usr/local/mysql/lib/中或者/usr/lib/mysql/plugin中,根据自己安装mysql时的路径来看。

在这里插入图片描述

2、如果有该文件,直接第3步。没有这个库的话,打开下面的百度网盘链接,然后下载到本地。切换到下载到的目录,然后输入sudo mv libmysqlclient.so.20 /usr/lib/mysql/plugin将库文件移动到mysql/plugin中。

在这里插入图片描述
3、现在我们有了这个库文件,我们需要将它设置一个软链接指向系统需要的文件名libmysqlclient.so.20。这样,只要系统想访问libmysqlclient.so.20,就会调用到这个库文件。大家可以把软连接当成是文件的引用,具体的解释在文末。

输入命令:sudo ln -s /usr/lib/mysql/plugin/libmysqlclient.so.20 /usr/lib/libmysqlclient.so.20回车输入管理员密码,然后创建成功。如果输错了想删除软链接,输入rm -rf /usr/lib/libmysqlclient.so.20即可删除,也就是rm -rf 链接路径名

在这里插入图片描述
4、我们再次编译项目,如果是在VsCode中哦,直接Ctrl+Shift+B,编译成功。

在这里插入图片描述

在Linux系统中,内核为每一个新创建的文件分配一个inode(索引结点),每个文件都有一个唯一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存中,从而实现对文件的快速访问。
链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link),相当于Windows下的快捷方式。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。