在C++编译器下dlsym()引发的思考
cafesun 2007-02-16
这几天看到讲解dlopen,dlsym函数的文章,忍不住自己编码尝试了一下。引出了一些其他知识。
dlsym()的函数原型是
void* dlsym(void* handle,const char* symbol)
handle是由dlopen打开动态链接库后返回的指针,symbol就是要求获取的函数的名称,函数返回值是void*,指向函数的地址,供调用使用。dlsym的返回值与symbol参数就是本文着重要讲述的要点。
先看下面一段代码
DLLTest.cpp//
#include "DateTime.h"
#include <dlfcn.h>
#include <iostream>
using namespace std;
typedef int(*FuncDatePtr)(DateType* d);
int main(int argc,char* argv[])
{
DateType d;
//TimeType t;
void* dp=0;
char* error=0;
cout<<"Dll Programe Demo:"<<endl;
dp=dlopen("libtime.so",RTLD_NOW);
if(dp==0)
{
cout<<"Open time.so Failed!"<<dlerror()<<endl;
return 1;<