Err:undefined symbol:FT_Done_MM_Var 及 .so 文件替换方法

Err:undefined symbol:FT_Done_MM_Var

import cv2
ImportError:... .../anaconda3/envs/... .../lib/libfontconfig.so.1: undefined symbol: FT_Done_MM_Var

原因

解决办法参考

undefined symbol: FT_Done_MM_Var 错误的原因,libfontconfig.so.1造成。其根本原因是,Anaconda的 lib 中,把 Python需要的各种 lib 单独列了出来,造成和系统中的库版本不一致。
系统库所在位置:/usr/lib/x86_64-linux-gnu/,opencv 的 Python版本是按照系统库编译的,而在调用时,使用了 anaconda/lib中的库。

解决思路

  • libfontconfig.so.1 建立新的连接,指向系统库目录下的libfontconfig.so.1
  • 直接复制系统库目录下的 libfontconfig.so.1文件,替换 Anaconda目录下的 libfontconfig.so.1

但是cp new.so old.so的方式替换程序使用的动态库文件会导致正在运行中的程序崩溃。这里选择第二种方法。

另外,可以直接采用
locate libfontconfig.so.1 找文件。

.so 文件替换方法

怎样在不停止程序的情况下替换so文件,并且保证程序不会崩溃?

答案是采用**“rm+cp” 或“mv+cp” 来替代直接“cp”** 的操作方法。

在用新的so文件 libnew.so 替换旧的so文件 libold.so 时,如果采用如下方法:

rm libold.so
cp libnew.so libold.so

小白看过来

$ cd ... .../anaconda3/envs/... .../lib/
$ rm libfontconfig.so.1
$ cp /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 libfontconfig.so.1

这样就好咯~

想知道为什么,(请参考)[https://www.linuxidc.com/Linux/2011-01/31622.htm]

你可能感兴趣的:(Linux-,Ubuntu,使用笔记,opencv,.so,opencv,linux)