/usr/bin/ld: warning: **libmysqlclient.so.20**, needed by //usr/lib/libgdal.so.20, not found (try u

报错信息

/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下的快捷方式。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

振华OPPO

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值