当前位置: 技术问答>linux和unix
Linux下加载库的问题(dlopenm, dlsym)
来源: 互联网 发布时间:2017-05-08
本文导语: 如题, 程序中发现load库成功,但是加载函数的时候报错: undefined symbol functionname 是很简单的一个东西,因为不熟悉,所以老是弄不好,请各位指导! 代码如下: //////////////////////////////////////////////// // SCTLX_Defaul...
如题, 程序中发现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)
{
char pLeft[1024];
int iLeft;
char pErrInfo[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;
}
----------------------------------------------------------
/////////////////////////////////////////////////
// 主程序
...
typedef int (*Function)(char* pszLeft, int nLeft, char* pszErrInfo);
string g_strDllList[1024];
Function g_FuncList[1024];
void* g_dl[1024];
...
int iLoadDll(const char* pDllPath)
{
int iDllNo;
iDllNo = -1;
if (pDllPath == NULL)
return -1;
if (strlen(pDllPath) == 0)
return -1;
for (iDllNo=0; iDllNo