dynamic linking

FossilOrigin-Name: fb76bfb278b3ba6d0caf0c4a67f739c020c778623239db0efe950ae8311ca34f
This commit is contained in:
7u83@mail.ru
2018-02-25 23:19:44 +00:00
parent f95505c0bd
commit dbd934e9fe
14 changed files with 122 additions and 110 deletions

View File

@ -182,16 +182,32 @@ int cw_mod_add(struct cw_Mod * (*modfn)() ){
}
int cw_mod_add_dynamic(const char * filename){
int cw_mod_add_dynamic(const char * path, const char * mod_name){
char * filename = malloc(strlen(path)+strlen(mod_name)+8);
if (!filename)
return 0;
strcpy(filename,path);
strcat(filename,"/");
strcat(filename,mod_name);
strcat(filename,".so");
int rc=0;
void * handle;
handle = dlopen(filename,RTLD_NOW);
if (!handle){
printf("Error: %s",dlerror());
cw_log(LOG_ERROR,"Failed to load module: %s",dlerror());
goto errX;
}
printf("Load DLL %p\n",handle);
void * ifu = dlsym(handle,"mod_get_interface");
if (!ifu){
cw_log(LOG_ERROR,"Failed to load module: %s",dlerror());
goto errX;
}
void * ifu = dlsym(handle,"bstr_create");
printf("IFU DLL %p\n",ifu);
errX:
free(filename);
return rc;
}