dlopen example

来源:互联网 发布:淘宝卖家中心在哪 编辑:程序博客网 时间:2024/06/06 09:19

//Liba.c#include<stdio.h>#include<stdlib.h>void PrintInfo(){    printf("PrintInfo from Liba.so\n");}void Test(){    PrintInfo();}


//Libb.c#include<stdio.h>#include<stdlib.h>void PrintInfo(){    printf("PrintInfo from Libb.so\n");}void Test(){    PrintInfo();}

//Test.c#include <dlfcn.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>typedef void TestFunc();typedef TestFunc *TestFuncPtr;void PrintInfo(){    printf("PrintInfo from Test\n");}int main(){    void *HandlA;    void *HandlB;    TestFuncPtr FunA;    TestFuncPtr FunB;    PrintInfo();    //HandlA = dlopen("./liba.so", RTLD_NOW);    //HandlB = dlopen("./libb.so", RTLD_NOW);    //HandlA = dlopen("./liba.so", RTLD_NOW | RTLD_GLOBAL);    //HandlB = dlopen("./libb.so", RTLD_NOW | RTLD_GLOBAL);    //HandlA = dlopen("./liba.so", RTLD_LAZY);    //HandlB = dlopen("./libb.so", RTLD_LAZY);    HandlA = dlopen("./liba.so", RTLD_LAZY | RTLD_GLOBAL);    HandlB = dlopen("./libb.so", RTLD_LAZY | RTLD_GLOBAL);    FunA = dlsym(HandlA,"Test");    FunB = dlsym(HandlB,"Test");    FunA();    FunB();    PrintInfo();    return 0;}


#make file

test: liba.so libb.so Test.cgcc Test.c -o test -ldlliba.so: Liba.cgcc -shared -o liba.so Liba.clibb.so: Libb.cgcc -shared -o libb.so Libb.cclean:rm test liba.so libb.so


0 0
原创粉丝点击