“undefined symbol: _ZTVN4aiui12AIUIListenerE“ 的含义与兼容方式

本文主要是介绍“undefined symbol: _ZTVN4aiui12AIUIListenerE“ 的含义与兼容方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

场景

       由于项目需要,一套代码在两个产品上运行(开启不同的进程),但在其中一个硬件平台(假设为平台A)上并不需要使用讯飞语音服务的动态库 libaiui.so,所以为了节省平台A的存储空间,决定不把libaiui.so放进文件系统中.

遇到的问题

       由于使用同一套代码,都连接了 libaiui.so,所以平台A上也需要一个 libaiui.so,但由于没有使用到里面的函数,所以交叉编译了一个空的libaiui.so放进去,结果报错"undefined symbol: _ZTVN4aiui12AIUIListenerE"

方法

       经分析,"undefined symbol: _ZTVN4aiui12AIUIListenerE"表示刚才编译的空的libaiui.so中不存在类aiui的成员函数aiui::AIUIListener的定义;所以只需在编译自己的空的libaiui.so引入AIUI的头文件并定义该函数即可;最后的代码如下:

#include <stdio.h>
#include <AIUI.h>// undefined symbol: _ZTVN4aiui12AIUIListenerE
using namespace aiui;
AIUIListener::~AIUIListener()
{}#include <json/writer.h>
//undefined symbol: _ZTVN2VA4Json6WriterE
VA::Json::Writer::~Writer()
{}//undefined symbol: _ZTVN2VA4Json10FastWriterE
//VA::Json::FastWriter::FastWriter()
using namespace VA::Json;
FastWriter::FastWriter()
{}//实现父类的纯虚函数 std::string write(const Value& root) = 0 
std::string FastWriter::write(const Value& root)
{return "";
}

  编译:

arm-linux-gnueabihf-g++ -fPIC -Wall --shared aiuiLib.cpp -I./AIUI/aiui/ -I./jsoncpp/ -o libaiui.so

这篇关于“undefined symbol: _ZTVN4aiui12AIUIListenerE“ 的含义与兼容方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117123

相关文章

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1