5月6日:gcc编译选项

2021-05-06  本文已影响0人  站立着的心X

一、GCC 动态库处理

  1. ldd XX ###编译通过,但运行时发现不了动态库
image.png

编译时的路径: -L 库路径
二进制可执行程序: -Wl -rpath=目录

image.png
image.png
image.png
  1. 动态调用
image.png
image.png
typedef  int func_m(void);   //定义函数类型,即要在动态库中获取的--函数名。
static int sys_libso_operation(char * libso_name, char * function_name)
{
    void *handle;
    char *error;
    
        //打开动态库句柄
    handle = dlopen(libso_name,RTLD_NOW);
    if (!handle) {
        printf("!!!!!!!![%s]\n", dlerror());
        return 0;
    }

        //获取动态库中函数的-----函数指针
    func_m * func = dlsym(handle,function_name));
    if ((error = dlerror()) != NULL) {
        printf("!!!!!!!![%s]\n", dlerror());
        return 0;
    }
        
        //通过函数指针运行函数
    func();

        //关闭动态库句柄
    dlclose(handle);
    return 0;
}

 gcc -fPIC -shared XX.c -o libxxx.so 

二.volatile


image.png
上一篇 下一篇

猜你喜欢

热点阅读