zoukankan      html  css  js  c++  java
  • Linux C动态链接库实现一个插件例子

    实现一个简单的计算动态链接库;升级动态链接库后,在不重新编译主程序的情况下,直接生效。

    lib库:

    #cat math.c
    #include <stdio.h>
    
    int add(int x, int y)
    {
    	return (x + y);
    }
    
    int sub(int x, int y)
    {
    	return (x - y);
    }
    
    int mul(int x, int y)
    {
    	return (x * y);
    }
    
    int div(int x, int y)
    {
    	return (x/y);
    }
    

    生成动态链接库

    #gcc -shared -fPIC -o libmath.so math.c
    

    主程序:

    #cat main.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <dlfcn.h>
    
    typedef int (*cac_func)(int, int);
    
    int main(void)
    {
    	void *handle;
    	char *error;
    	cac_func fp=NULL;
    
    	handle = dlopen("./libmath.so", RTLD_LAZY);
    	if (!handle)
    	{
    		fprintf(stderr, "%s
    ", dlerror());
    		exit(EXIT_FAILURE);
    	}
    
    	dlerror();
    
    	fp = dlsym(handle, "add");
    	if ((error = dlerror()) != NULL)
    	{
    		fprintf(stderr, "%s
    ", error);
    		exit(EXIT_FAILURE);
    	}
    
    	printf("add:%d
    ", fp(1,1));
    
    	return 0;
    }
    
    #gcc -o main.out main.c
    /tmp/ccTdLhjj.o: In function `main':
    main.c:(.text+0x1b): undefined reference to `dlopen'
    main.c:(.text+0x2b): undefined reference to `dlerror'
    main.c:(.text+0x56): undefined reference to `dlerror'
    main.c:(.text+0x67): undefined reference to `dlsym'
    main.c:(.text+0x70): undefined reference to `dlerror'
    collect2: error: ld returned 1 exit status
    

    需要使用 指定使用动态链接库: dl

    #gcc -o main.out -ldl main.c
    

    运行:

    #./main.out
    add:2
    

    修改库:

    #cat  math.c
    #include <stdio.h>
    
    int add(int x, int y)
    {
    	return (x + y + 100);
    }
    
    

    重新编译库:

    #gcc -shared -fPIC -o libmath.so math.c
    

    运行:

    #./main.out
    add:102
    
  • 相关阅读:
    Excel设置下拉选项的方法
    Codeforces Round #218 (Div. 2) (线段树区间处理)
    手动配置S2SH三大框架报错(一)
    一种H.264高清视频的无参考视频质量评价算法(基于QP和跳过宏块数)
    UIWebView的使用
    AFNetworkIng的简单使用
    虚线边框的实现
    iOS实现简单时钟效果
    hdu 3966 Aragorn's Story
    Count on a tree
  • 原文地址:https://www.cnblogs.com/muahao/p/10376344.html
Copyright © 2011-2022 走看看