/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时的路径来看。

/usr/bin/ld: warning: **libmysqlclient.so.20**, needed by //usr/lib/libgdal.so.20, not found (try u_第1张图片

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

/usr/bin/ld: warning: **libmysqlclient.so.20**, needed by //usr/lib/libgdal.so.20, not found (try u_第2张图片
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,编译成功。

/usr/bin/ld: warning: **libmysqlclient.so.20**, needed by //usr/lib/libgdal.so.20, not found (try u_第3张图片

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

你可能感兴趣的:(Ubuntu,ubuntu,libmysql,slam)