????????????????????????????????????????????????????ù???? ???????????????????????????ж???? ????????????????????????????????????????????window?н?dll????Unix/Linux?н???so??????????????е?????????е????????Щ??????????dll????so???в?????????????????????ú?????????ú???????????????????????????????????

????????????????????????????????ɡ???????????so????dll??в????????????????Unix/Linux?е?C????????????????????????????dlopen??dlsym?????????е????????dlfcn.h?????С?

void * dlopen( const char * pathname?? int mode);

pathname??so????dll?????·??????Linux?б???????"./"????"../"????????·?? ???? ??"/"?????·??
mode??????so????dll??????????????????? <DIV class=para>RTLD_LAZY????dlopen????????????????е?δ???????????н?????????????????Ч?????????????????????????????</DIV><DIV class=para>RTLD_NOW?? ?????dlopen?????????????????δ?????????????????????????dlopen????NULL

<DIV class=para>????????NULL</DIV><DIV class=para>??????????????</DIV>.</DIV>

 dlsym(void *dp?? char * funtionname);
dp:???????so????dll??????
functionname????????????????

?????????void*???????????

dlclose(void *dp)
????????????????????е?????????????ü????0??????????????ж???

??????????

#include <stdio.h>
#include <dlfcn.h>
#include "dll.h"

int main(){
    void *dp;
    char *err;
    char fname[20];
   &nbsp;dll p;
&nbsp;   void (*init)(dll *p);
    pirntf("????????????????????model1 ????model2");
    scanf("%s"?? fname);
    sprintf("./%s^?? fname);
  &nbsp; dp = dlopen(fname?? RTLD_LAZY);//???????
    if( NULL == dp) {
        printf("%s "?? dlerror());
        exit(1);
    }
    init = dlsym(dp?? "init");//???init??????????
    init(&p);
    printf("%s "?? p.name);