5月6日:gcc编译选项

一、GCC 动态库处理

  1. ldd XX ###编译通过,但运行时发现不了动态库
5月6日:gcc编译选项_第1张图片
image.png

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

5月6日:gcc编译选项_第2张图片
image.png

5月6日:gcc编译选项_第3张图片
image.png

5月6日:gcc编译选项_第4张图片
image.png
  1. 动态调用
5月6日:gcc编译选项_第5张图片
image.png

5月6日:gcc编译选项_第6张图片
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


5月6日:gcc编译选项_第7张图片
image.png

你可能感兴趣的:(5月6日:gcc编译选项)