调用so提示symbol lookup error: undefined symbol

bjskyhorse bjskyhorse 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题是这样:
我编译生成了一个so,这个库的里面有一个token类,token类的A函数调用了调用了B算法。我的代码里面包含对应B算法的头文件和CPP,编译生成so.B算法是存粹C实现的,因此
B算法的头文件里面也采用#ifdef __cplusplus
extern "C" {
#endif
这种方式定义。
结果测试程序调用到A算法的时候,就提示symbol lookup error: undefined symbol....
而且比较奇怪的是,我的测试程序如果采用隐式调用的方式,就没有问题。
比如这样:
p = CreateInstance(0);--实例化token类
p->A函数,
而如果采用显式调用的方式,比如通过
dlopen(so的路径, RTLD_LAZY | RTLD_GLOBAL);
dlsym也执行成功。
如果是调用so库中没有调用B算法的函数,就没有问题。(这些函数都在一个cpp里面定义,没有用到B算法的CPP)
如果调用了使用B算法的A函数(A函数和B算法分别在两个CPP中),就会提示symbol lookup error: undefined symbol
...全文

相关推荐

解决gedit: symbol lookup error: /home/xxx/libgobject-2.0.so.0: undefined symbol: g_date_copy问题

操作系统:Ubuntu 16.04 问题描述: 在终端启动gedit命令或者vscode命令报错:gedit: symbol lookup error: /home/chujie/anaconda3/lib/libgobject-2.0.so.0: undefined symbol: g_date_copy 问题分析: 导致错误的原因应该是gedit依赖libgobject-2.0.so库,而/home/chujie/anaconda3/lib下的这个库版本不对,没有对应的符号。 因此解决的思路是从系统中找到正确的依赖库。 查找系统中存在的libgobject库: locate libgob

不善言辞的我

linux下svn升级.

linux下svn升级

chengshao_

已解决:make clean bc: symbol lookup error: /home/data/anaconda2/lib/libreadline.so.6: undefined symbol:

问题:(编译caffe错误) 输入make clean命令,提示: bc: symbol lookup error: /home/data/anaconda2/lib/libreadline.so.6: undefined symbol: PC 解决方法: 先执行命令locate libreadline.so.6  然后会发现比如系统目录下:/lib/x86_64-linux

sunnie_mm

Linux动态库symbol lookup error:五大原因与系统化排查实战

动态链接是现代软件模块化设计的核心技术,它允许程序在运行时加载共享库,实现代码复用和解耦。其核心原理是运行时链接器(ld-linux.so)根据全局符号表,为程序中的未定义符号查找并绑定到动态库中的定义。这项技术的价值在于提升开发效率、减少内存占用并支持插件化架构,广泛应用于操作系统核心服务、数据库中间件及大型应用程序中。然而,在涉及多个动态库相互调用的复杂系统中,常因**符号可见性**或**ABI兼容性**等问题,引发运行时链接错误。本文聚焦于典型的`symbol lookup error`,深入剖析其五

weixin_33739523

fengmian123

fengmian123

CiYuanShuos
评论 8
收藏 已收藏
分享
返回顶部
bjskyhorse
Linux/Unix社区 18,828 成员 11,489 内容