??????????

????????Windows???е????????Linux???????????????????????????á?Windows???*.dll????Linux???*.so???????????????δ????????Linux??????

?????????????????

??????mytestso.c????У????????£?

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

int GetMax(int a?? int b)
{
 if (a >= b)
  return a;
 
 return b;
}

int GetInt(char* psztxt)
{
 if (0 == psztxt)
  return -1;
 
 return atoi(psztxt);
}

????????????????????б???
gcc -fpic -shared mytestso.c -o mytestso.so

??-fpic ?????????????????????λ???????????

?????????????????????mytestso.so??????????????????mytestso.so??

??????????ù????

??????????е???????????????????У???????????????????????????????С?????????ù?????е??????????????????????????????????????????????????????????ú??????????????????????????????ú?????????ú?????

??????mytest.c????У????????£?


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

int main(int argc?? char* argv[])
{
 void* pdlhandle;
 char* pszerror;
 
 int (*GetMax)(int a?? int b);
 int (*GetInt)(char* psztxt);
 
 int a?? b;
 char* psztxt = "1024";
 
 // open mytestso.so
 pdlhandle = dlopen("./mytestso.so"?? RTLD_LAZY);
 pszerror = dlerror();
 if (0 != pszerror) {
  printf("%s "?? pszerror);
  exit(1);
 }
 
 // get GetMax func
 GetMax = dlsym(pdlhandle?? "GetMax");
 pszerror = dlerror();
 if (0 != pszerror) {
  printf("%s "?? pszerror);
  exit(1);
 }
 
 // get GetInt func
 GetInt = dlsym(pdlhandle?? "GetInt");
 pszerror = dlerror();
 if (0 != pszerror) {
  printf("%s "?? pszerror);
  exit(1);
 }
 
 // call fun
 a = 200;
 b = 600;
 printf("max=%d "?? GetMax(a?? b));
 printf("txt=%d "?? GetInt(psztxt));
 
 // close mytestso.so
 dlclose(pdlhandle);
}