linux dlopen 内存,Linux下加载库的有关问题(dlopenm, dlsym)

Linux下加载库的问题(dlopenm, dlsym)

如题, 程序中发现load库成功,但是加载函数的时候报错: undefined symbol functionname

是很简单的一个东西,因为不熟悉,所以老是弄不好,请各位指导!

代码如下:

// SCTLX_DefaultOperationManager.h文件

#ifndef__SCTLX_DEFAULTOPERATIONMANAGER_H

#define__SCTLX_DEFAULTOPERATIONMANAGER_H

/******************************************

名称:SCTDefaultOperationManager

描述:默认操作功能

参数:

pszLeft:接口预留

nLeft:接口预留

pszErrInfo:错误信息

返回:

0:成功

-1:失败

******************************************/

extern "C" int SCTDefaultOperation(char* pszLeft, int nLeft, char* pszErrInfo);

#endif//__SCTLX_DEFAULTOPERATIONMANAGER_H

----------------------------------------------------------------------------------

// cpp文件

#include "stdlib.h"

#include "stdio.h"

#include "string.h"

using namespace std;

int SCTDefaultOperation(char* pszLeft, int nLeft, char* pszErrInfo)

{

charpLeft[1024];

intiLeft;

charpErrInfo[1024];

memset(pLeft, 0x00, 1024);

memset(pErrInfo, 0x00, 1024);

iLeft = 0;

memcpy(pLeft, pszLeft, 1024);

memcpy(pErrInfo, pszErrInfo, 1024);

iLeft = nLeft;

printf("默认操作: 什么也不做!...\n");

return 0;

}

----------------------------------------------------------

/

// 主程序

...

typedefint(*Function)(char* pszLeft, int nLeft, char* pszErrInfo);

stringg_strDllList[1024];

Functiong_FuncList[1024];

void*g_dl[1024];

...

intiLoadDll(const char* pDllPath)

{

intiDllNo;

iDllNo = -1;

if (pDllPath == NULL)

return -1;

if (strlen(pDllPath) == 0)

return -1;

for (iDllNo=0; iDllNo<1024; iDllNo++)

{

if (g_strDllList[iDllNo].length() != 0 && g_strDllList[iDllNo] == pDllPath)

{

printf("lib has been loaded, skipping...\n", pDllPath);

return iDllNo;

}

}

for (iDllNo=0; iDllNo<1024; iDllNo++)

{

if (g_dl[iDllNo] == NULL)

{

g_dl[iDllNo] = dlopen(pDllPath, RTLD_NOW);

if (dlerror() != NULL)

return -1;

else

{

printf("load lib successed: %s\n", pDllPath);

g_strDllList[iDllNo] = pDllPath;

return iDllNo;

}

}

}

}

intiLoadFunc(int iNodeNo, int iDllNo, const char* pFuncName)

{

if (iNodeNo  1024)

return -1;

if (iDllNo  1024)

return -1;

if (pFuncName == NULL)

return -1;

if (strlen(pFuncName) == 0)

return -1;

printf("NodeNo: %d, load function: %s\n", iNodeNo, pFuncName);

g_FuncList[iNodeNo] = (Function)dlsym(g_dl[iDllNo], pFuncName);

if (g_FuncList[iNodeNo] == NULL)

{

printf("%s\n", dlerror());

printf("NodeNo: %d, load function failed!\n", iNodeNo);

return -1;

}

return 0;

}

------------------------------------------------------------

/

//makefile

.PHONY: default

default:

g++ -Wall -W -shared -fPIC -o $(TargetPath)libSCTLX_DefaultOperationManager.so $(DefaultPath)SCTLX_DefaultOperationManager.cpp

.PHONY: dpscheck

dpscheck:

g++ -ldl -o $(TargetPath)dpscheck SCTLX_Maintain.cpp libini.a

网上搜了一些,大多是说要加个extern "C"的。。。。

分享到:

更多

------解决方案--------------------

你可以去看看gcc和g++的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

grafana zabbix 模板_Grafana + Zabbix 监控系统搭建

rafana&#xff1a;一个静态项目&#xff0c;需要联合nginx、apache等使用&#xff0c;友好的如下显示首先安装 grafana官网http://grafana.org/download/ 有好多版本可选&#xff0c;好几种包形式&#xff0c;三种安装方式(官方说明)&#xff1a;1、yum直接安装 rpm包&#xf…

java二维数组的常见初始化

public class Test{public static void main(String[] args){//第一种&#xff1a;//int[][] arr1 new int[][]{{1,2}, {2, 3}, {4, 5}};int[][] arr1 {{1,2}, {2, 3}, {4, 5}};System.out.println("arr1的数值&#xff1a;");for(int i0; i<3; i)for(int j0; j…

linux svn 备份脚本,SVN热备份脚本

SVN热备份脚本2011-08-03 徐磊#!/bin/sh########################################################## Script to do incremental rsync backups# modidfy: wanjie.info# date: 2010/06/04# 这个脚本不是xulei写的&#xff0c;我只是拿来主义&#xff0c;当然如果大家看不明白…

python如何删除对象属性_如何优雅的删除对象中的指定属性?

要优雅的话&#xff0c;使用 Lodash 的 omit 方法移除不要的属性&#xff1a;const object { a: 1, b: 2, c: 3 };const result _.omit(object, [a, c]);// > { b: 2 }或者用 pick 方法只留下需要的属性&#xff1a;const object { a: 1, b: 2, c: 3 };const result _.p…

java接口的应用举例

/* 接口的理解&#xff1a; 接口就是前期定义一个规则&#xff01;某一个类A&#xff0c;为了扩展自身的功能&#xff0c;对外提供这个接口&#xff0c;后期只要是符合这个接口&#xff08;规则&#xff09; 的类&#xff08;这个类是接口的子类&#xff09;&#xff0c;将子类…

linux 关闭scp服务器,Linux系统如何关闭scp和sftp命令

Linux系统如何关闭scp和sftp命令。sftp介绍sftp是Secure File Transfer Protocol的缩写&#xff0c;安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能scp介绍两台主机之间传输文件一般使用scp命令,通常用scp命令通过ssh获取对方…

自动补足算法是什么_如何自定义Shell(Fish版)的自动补全规则?

默认fish能自动补全的命令已经相当多了,常见的apt-get&#xff0c;rpm等都没问题&#xff0c;但今天却发现没有lsusb的补全规则,查看了下文档&#xff0c;发现规则比bash-completion简单不少&#xff0c;记录下&#xff5e;简单补全1. 建立自动补全规则文件默认自动补全路径由全…

嵌入式Linux安装Python环境,linux环境下安装python 3

说明&#xff1a;在linux环境下&#xff0c;都默认安装python 2的环境&#xff0c;由于python3在python2的基础上升级较大&#xff0c;所以安装python 3环境用于使用最新的python 3的语法。安装过程&#xff1a;1.下载&#xff0c;上传python 3源码包至服务器2.解压缩python 3压…

java接口中多继承的问题

java中支撑多继承吗&#xff1f; 支持-》接口啊 为什么接口支持多继承呢&#xff1f;因为接口中没有方法体&#xff01;即使可能两个接口中有一样的抽象方法&#xff0c;但是 只会调用子类中覆盖该同样抽象方法的具体方法&#xff01;不会引起调用的歧义&#xff01; interface…

图案设计灵感怎么写_平面设计理念怎么写100多字

平面设计求职者在找工作的过程中,有时个人简历起着很重要的作用。下面是由小编整理而成的平面设计简历范文参考&#xff0c;谢谢你的阅读。平面设计简历范文参考(一)xxx一年以上工作经验|男|27岁(3月11日)居住地&#xff1a;杭州电话&#xff1a;151*******(手机)E-mail&#x…

java匿名类和匿名对象及this的其他用法

/* 匿名内部类&#xff1a;就是内部类的简写格式。 必须前提&#xff1a;内部类必须继承或者实现一个类或者接口。 匿名内部类其实就是一个匿名 子类对象。 格式&#xff1a;new 父类对象 or 接口(){子类内容&#xff1b;&#xff08;覆盖父类的&#xff0c; 而且可以增加自己的…

linux下drcom无法上网,drcom为什么还是不能上网啊!

drcom为什么还是不能上网啊&#xff01;发布时间:2010-04-28 20:56:56来源:红联作者:hualong[is] 本帖最后由 hualong 于 2010-4-30 16:45 编辑 [/i]主要是因为我搞很久的drcom&#xff0c;还是不能上网啊&#xff01;&#xff01;截一个图让前辈们帮忙分析一下。安装了bulid-e…

python集合的加减_python 中对list做减法操作

问题描述&#xff1a;假设我有这样两个list&#xff0c;一个是list1&#xff0c;list1 [1, 2, 3, 4, 5]一个是list2&#xff0c;list2 [1, 4, 5]我们如何得到一个新的list&#xff0c;list3&#xff0c;list3中包括所有不在list2中出现的list1中的元素。即&#xff1a;list3 …

java中Comparable实现对象的比较

/* class A implements Comaprable<A>{ } 那么 A x new A(); 类关系图 Object o A; Object Comparable c A; | Comparable A 实现了 Comparable 接口嘛 …

linux db2 归档,DB2的归档模式设置方法

当做在线备份&#xff0c;即加上online参数后&#xff0c;可以看到如下告警&#xff1a;[db2inst1localhost backup]$ db2 backup db sample online to /dev/nullSQL2413N Online backup is not allowed because the database is not recoverableor a backup pending condition…

css提取页面元素唯一性_下面这个函数,能够获取一个元素的任意 CSS 属性值。...

在对网页进行调试的过程中&#xff0c;经常会用到js来获取元素的CSS样式&#xff0c;方法有很多很多&#xff0c;现在仅把我经常用的方法总结如下&#xff1a;1. obj.style&#xff1a;这个方法只能JS只能获取写在html标签中的写在style属性中的值(style”…”)&#xff0c;而无…

Linux检查依赖库,linux 查看依赖库

readelf -d libsurfaceflinger.so打印出来的数据如下&#xff1a;Dynamic section at offset 0xb4 contains 37 entries:Tag Type Name/Value0x00000001 (NEEDED) Shared library: [liblog.so]0x00000001 (NEEDED) …

java中final注意的问题

public class Test{public static void main(String[] args){Person p new Person();} } /* 4.修饰的变量是一个常量(所有字符都大些 XXX 或者 XXX_XXX)&#xff0c;只能赋值一次!final 固化的都是显示初始化的值(定义并初始化)&#xff08;或者构造函数中的特定初始化的值&am…

android判断点击次数_Android应用统计-使用时长及次数统计(一)

关键字&#xff1a; 应用统计 Android源码 应用使用时长 应用使用次数最近在做有关于应用统计有关的工作&#xff0c;主要是统计系统中客户端应用(非系统自带的那些基础应用&#xff0c;比如DownLoadManager)&#xff0c;在每一天的使用情况&#xff0c;统计内容包括&#xff1…

linux+cp+-rdf,简单构建基于RDF和SPARQL的KBQA(知识图谱问答系统)

本文主要通过python实例讲解基于RDF和SPARQL的KBQA系统的构建。该项目可在python2和python3上运行通过。注&#xff1a;KBQA即是我们通常所说的基于知识图谱的问答系统。这里简单构建的EasyKBQA&#xff0c;数据来源于网络&#xff0c;源码地址看下面补充说明。目录&#xff1a…