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]