c++实现加载so动态库中的资源

实例如下:

#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <iostream> 

//编译命令 g++ -m32 EncodeOrDecode.cpp -ldl -o edcode
//名字通过nm -D xxxxxx.so获取

using namespace std;
int main(int argc,char **argv){
void *handle = dlopen("./libpub_com_service.so",RTLD_LAZY);
if(!handle){
printf("open libpub error ,dlerror=%s\n",dlerror());
return -1;
}
string src = "05d7151349b7fe9b54306d90f9c938b3";
string desKey = "pub.%?d5";//58
printf("start ..src=[%s].....size=[%d].\n",src.c_str(),src.size());
//encode
typedef string (*encode_t)(const string encodeSrc,const string encodeKey);

encode_t encode = (encode_t)dlsym(handle,"_ZN10NS_PUB_API9DesEncodeESsSs");
if(!encode){
printf("not found encode function ,dlerror= %s \n",dlerror());
dlclose(handle);
return -1;
}
string encodeStr = encode(src,desKey);
printf("get the encode function success ..encodeStr=[%s].....size=[%d]\n",encodeStr.c_str(),encodeStr.size());
//decode
typedef bool (*decode_t)(const string decodeSrc,const string decodeKey,string &outResult);

decode_t decode = (decode_t)dlsym(handle,"_ZN10NS_PUB_API9DesDecodeESsSsRSs");
if(!decode){
printf("not found decode function ,dlerror= %s \n",dlerror());
dlclose(handle);
return -1;
}
string decodeOut;
bool ret = decode(encodeStr,desKey,decodeOut);
printf("get the decode function success ...ret=[%d]...decodeOut=[%s].....size=[%d]\n",ret,decodeOut.c_str(),decodeOut.size());
//end
dlclose(handle);

return 0;

}

以上就是小编为大家带来的c++实现加载so动态库中的资源全部内容了,希望大家多多支持我们~

(0)

相关推荐

  • 用C++面向对象的方式动态加载so的方法

    这几天在写一个server,由于框架相同,仅仅是获取数据源的地方有区别,所以,研究了一下如何使用面向对象的方法来动态加载so. 主要思想就是: 1.通过一个函数能够获得一个基类的指针,这样在调用基类的函数的时候,就能自动调用子类的实现了. 2.存储so对象的指针应该是外层类的一个static变量. 详细还是看代码吧: 1)首先定义一个公共的头文件,里面存储的基类的定义:(需要注意的就是,只要不是纯虚函数,那么就一定要有实现:还有就是析构函数需要为虚函数) so和主调程序都需要包含这个头文件. s

  • c++实现加载so动态库中的资源

    实例如下: #include <stdio.h> #include <dlfcn.h> #include <stdlib.h> #include <iostream> //编译命令 g++ -m32 EncodeOrDecode.cpp -ldl -o edcode //名字通过nm -D xxxxxx.so获取 using namespace std; int main(int argc,char **argv){ void *handle = dlope

  • Golang使用CGO与Plugin技术运行加载C动态库

    目录 文章简介 技术背景 解决方案1 解决方案2 文章简介 本文介绍一种 Golang 程序在运行时加载 C 动态库的技术,跳过了 Golang 项目编译阶段需要链接 C 动态库的过程,提高了 Golang 项目开发部署的灵活性. 技术背景 Golang 程序调用 OpenCC 动态库的函数,执行文本繁体转简体操作. 需要在编译时不链接动态库,只在程序运行时加载 OpenCC 动态库. OpenCC 库是使用 C++ 编写的繁简体转换程序,提供 C 语言 API 接口. 开源项目地址 CGO 技

  • Android Native库的加载及动态链接的过程

    Native库的装载过程 我们从一个简单的NDK Demo开始分析. public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Example of a call t

  • C#调用非托管动态库中的函数方法

    C#如何调用一个非托管动态库中的函数呢,比如用VC6写的动态库,总之C#调用动态库的过程是比Java调用DLL动态库方便快捷多了,下面举例说明这个过程. 1.创建一个非托管动态库 代码如下: 复制代码 代码如下: //这一句是声明动态库输出一个可供外不调用的函数原型.     extern   "C"  __declspec(dllexport)  int  add( int ,  int ); int  add( int  a, int  b)      {          //实

  • vue3如何按需加载第三方组件库详解

    前言 以Element Plus为例,配置按需加载组件和样式. 环境 vue3.0.5 vite2.3.3 安装 Element Plus yarn add element-plus # OR npm install element-plus --save 完整引入 import { createApp } from 'vue' import ElementPlus from 'element-plus'; import 'element-plus/lib/theme-chalk/index.c

  • jQuery在页面加载时动态修改图片尺寸的方法

    本文实例讲述了jQuery在页面加载时动态修改图片尺寸的方法.分享给大家供大家参考.具体如下: $(window).bind("load", function() { // IMAGE RESIZE $('#product_cat_list img').each(function() { var maxWidth = 120; var maxHeight = 120; var ratio = 0; var width = $(this).width(); var height = $(

  • Java反射之静态加载和动态加载的简单实例

    静态加载: package com.imooc.加载类; public class Office_Static { public static void main(String[] args) { //new 创建对象,是静态加载类,在编译时刻就需要加载所有的可能使用到的类 if("Word".equals(args[0])){ Word w = new Word(); w.start(); } if("Excel".equals(args[0])){ Excel

  • 浅谈Java 类中各成分加载顺序和内存中的存放位置

    一.什么时候会加载类? 使用到类中的内容时加载:有三种情况 1.创建对象:new StaticCode(); 2.使用类中的静态成员:StaticCode.num=9;  StaticCode.show(); 3.在命令行中运行:java StaticCodeDemo 二.类所有内容加载顺序和内存中的存放位置 利用语句进行分析: 1.Person p=new Person("zhangsan",20); 该句话所做的事情: 1.在栈内存中,开辟main函数的空间,建立main函数的变量

  • 解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题

    Vue使用swiper插件时特别是轮播元素含有动态数据时可能会出现数据为空或者白屏的问题 使用下面的方法可以解决(保证在数据请求之后再渲染页面) 页面结构 <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide tpOne" v-if="topInfo"> <-- 此处为绑

  • PostgreSQL将数据加载到buffer cache中操作方法

    我们都知道数据在缓存中访问远比在磁盘中访问速度要快,那么我们怎么在pg中将指定的数据加载到缓存中呢,这有点类似于Oracle的in-memory. 当然要注意并不是把数据加载到内存中就一定是好的,因为相较于磁盘,内存总是有限的,所以一帮我们只是在特殊场合下将需要的数据加载到内存中来加快访问的速度. 我们可以使用pg_prewarm插件来将指定的表加载到OS Buffer或者pg shared buffer中. 安装: bill=# create extension pg_prewarm ; CR

随机推荐