动态链接库引发的血案

# 动态链接库的制作、加载和系统调用 + 软连接

0.什么是动态链接库

目标文件的集合

1.制作

gcc -fpic -shared fun.c -o libfun.so

# -fpic 编译生成地址无关的代码
# -shared 生成动态链接库

2.加载

gcc -o main main.c ./libfun.so

gcc -o main main.c -L./ -lfun

# -L 指定动态链接库的路径
# -lfun 链接库函数fun,但是运行会出现问题

# 将动态链接库路径加入环境变量LD_LIBRARY_PATH中

3.系统调用

void * dlopen(const char *filename, int flag)

dlerror()

void * dlsym(void *handle, char *symbol)

dlclose()

# 例子:

int main()
{
    void *handle;
    char *error;
    
    double (*cosine)(double);
    handle = dlopen("/lib/libm.so.6", RTLD_LAZY);
    if(!handle)
    {
        fputs(dlerror(), stderr);
        exit(1);
    }
    
    cosine = dlsym(handle, "cos");
    if((error = dlerror()) != NULL)
    {
        fputs(error, stderr);
        exit(1);
    }
    printf("%f", (*cosine)(2, 0));
    dlclose(handle);
    return 0;
}

# 关于ar命令的引入

ar rcs libxxx.a xx1.o xx2.o

替换/创建静态库,s是创建目标文件的索引

ar t libxxx.a 
# 查看库文件中有哪些目标文件

ar tv libxxx 
# 同上,显示详细信息

nm -s libxxx.a 
# 显示库文件中的索引表

ranlib libxxx.a 
# 为库文件创建索引表


# 创建并使用静态链接库

touch test.h test.c main.c 

gcc -c test.c 

ar rcs libtest.a test.o

gcc -o main main.c -L./ -ltest

./main 


# 软连接的制作

ln -s <srcname> <linkname>

# 删除除了某一文件的其他文件

rm -f !(test.c|main.c)

# 上述命令不成功,执行这一命令
shopt -s extglob


信号处理和网络方面的内容还在学习,

信号处理的内容要先学习一下进程的知识,后面一起总结吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值