在我移植robot_voice语音合成包编译时出现/usr/bin/ld: 找不到 -lmsc的错误

参考文章:https://blog.csdn.net/weixin_39059031/article/details/84135125

错误如图:

原因是缺少了libmsc.so,科大讯飞语音 SDK 的相关库文件

存在我的/home/mao/xqq/src/robot_voice/libs路径下

解决方法:

1.将libmsc.so复制到/usr/local/lib路径下

sudo cp /path/to/source/libmsc.so /usr/local/bin/
#我的环境下使用的指令为
sudo cp /home/mao/xqq/src/robot_voice/libs/x64/libmsc.so /usr/local/bin/
#用绝对路径!否则容易报错!之后更新动态链接器的缓存,否则系统可能无法识别新添加的库文件。
sudo ldconfig

2.重新编译,运行

编译没有问题了,但是在rosrun执行时又出现问题!!

 /home/mao/xqq/devel/lib/robot_voice/tts_subscribe: error while loading shared libraries: libmsc.so: cannot open shared object file: No such file or directory
文件在执行时无法打开libmsc.so

这是因为程序的链接路径不正确

如果使用 CMake 构建项目,确保 CMakeLists.txt 文件中正确指定了 libmsc.so 库的链接。

我打开了我的 CMakeLists.txt发现其中缺少了

find_library(MSC_LIBRARY msc PATHS /usr/local/lib)

加上后重新编译,可以。

再次执行rosrun robot_voice tts_subscribe 成功!!

注:复制的时候x86与x64都试一下,我最初复制了x86,报错

/home/mao/xqq/devel/lib/robot_voice/tts_subscribe: error while loading shared libraries: libmsc.so: wrong ELF class: ELFCLASS32

出现“wrong ELF class: ELFCLASS32”错误,表明你的程序是64位的,而链接的 libmsc.so 库是32位的。这意味着程序和库的架构不匹配。则应该cp x64!

至此,解决!

耗费我一天的时间,各种找资料,最终在我和ai的完美配合下解决问题。

一切源自于对cmake的不熟悉,今后加强。

希望大家,天天开心,一起进步!

更多推荐