编译pjsua2后Python3.12导入失败:undefined symbol: pj_log_5
解决pjsua2 Python3.12导入时的
pj_log_5未定义符号错误 问题本质
错误提示的undefined symbol: pj_log_5,是因为pjproject自带的speex库编译时未正确链接到pjproject核心库,导致运行时找不到日志函数的符号。
修复操作
1. 重新配置编译pjproject
先清理之前的编译残留,再用指定参数重新配置编译:
export CFLAGS="$CFLAGS -fPIC" make clean && make distclean ./configure --enable-shared --disable-static --with-speex=builtin make dep && make sudo make install
--enable-shared:生成共享库,避免静态库的链接冲突--disable-static:禁用静态库,简化依赖关系--with-speex=builtin:强制使用pjproject自带的speex源码编译,自动关联pjproject核心库,从根源避免符号缺失问题
2. 重新编译Python绑定
进入Python绑定目录,清理旧编译文件后重新编译安装:
cd pjsip-apps/src/swig/python make clean make sudo make install
3. 检查依赖是否正常
编译完成后,验证speex库是否正确链接了pjproject核心库:
ldd /pjproject-2.14.1/third_party/lib/libspeex.so.2
如果输出中能看到libpj.so、libpjlib-util.so这类pjproject的库条目,说明链接正常。
4. 确保Python能加载到库
如果依旧导入失败,可临时设置环境变量让系统找到pjproject的库:
export LD_LIBRARY_PATH=/pjproject-2.14.1/lib:/pjproject-2.14.1/third_party/lib:$LD_LIBRARY_PATH
若要永久生效,将上述两个路径写入/etc/ld.so.conf.d/pjproject.conf文件,再执行sudo ldconfig刷新缓存即可。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

