linux下使用gcc生成动态so,并调用

在linux下编译C/C++经常会遇到,在这里做个笔记,也是因为别人问我,我才想起来去查了下,发现网上有这样的玩意,但有些坑吧。

通过一个例子看看如何生成动态库。

头文件:so_test.h
三个.c文件:test_a.c test_b.c test_c.c

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

so_test.h

#include "stdio.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

2 动态库的链接

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

3 测试是否动态链接,

$ ldd test

执行test,可以看到libtest.so not find

选区_003.png

将libtest.so放到usr/lib目录下

前提是你必须有访问该文件的权限.如果要权限,可以将命令切换到usr下,然后输入命令

$ sudo chmod 775 lib

再次输入命令

$ ldd test

得到如下结果:


选区_005.png

暂时就记录到这里了,至于在android怎么玩我还在研究中。。。。

你可能感兴趣的:(linux下使用gcc生成动态so,并调用)