C++编译和使用.so动态链接库(一)

1. 动态链接库.so的编译

下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so

// so_test.h
#include <stdio.h>
#include <stdlib.h>

void test_a();
void test_b();
void test_c();
// test_a.c
#include "so_test.h"
void test_a()
{
    printf("this is in test_a...\n");
}
// test_b.c
#include "so_test.h"
void test_b()
{
    printf("this is in test_b...\n");
}
// test_c.c
#include "so_test.h"
void test_c()
{
    printf("this is in test_c...\n");
}

将这几个文件编译成一个动态库:libtest.so

$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so

在代码路径上生成了libtest.so

2、动态库的链接

在1、中,我们已经成功生成了一个自己的动态链接库libtest.so,下面我们通过一个程序来调用这个库里的函数。程序的源文件为:test.c。

// test.c:
#include "so_test.h"
int main()
{
    test_a();
    test_b();
    test_c();
    return 0;
}

将test.c与动态库libtest.so链接生成执行文件test:

 $ gcc test.c -L. -ltest -o test                 
   测试是否动态连接,如果列出libtest.so,那么应该是连接正常了
$ ldd test
   执行test,可以看到它是如何调用动态库中的函数的。

如果在打印出现的信息中,你发现有一行:libtest.so => not found, bashrc添加.so的环境

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/compile_so

参考:https://www.cnblogs.com/blogernice/articles/9851042.html
https://www.cnblogs.com/wuchangming/articles/3084167.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DYF-AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值