在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
将libtest.so放到usr/lib目录下
前提是你必须有访问该文件的权限.如果要权限,可以将命令切换到usr下,然后输入命令
$ sudo chmod 775 lib
再次输入命令
$ ldd test
得到如下结果:
暂时就记录到这里了,至于在android怎么玩我还在研究中。。。。