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

当遇到`Err:undefined symbol:FT_Done_MM_Var`错误时,问题根源在于Anaconda库与系统库版本不一致。解决方法包括为Anaconda创建链接至系统库,或者直接替换Anaconda目录下的.so文件。为了避免程序崩溃,推荐使用"rm+cp"或"mv+cp"的操作顺序来替换.so文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值