Chinaunix首页 | 论坛 | 博客
  • 博客访问: 703937
  • 博文数量: 96
  • 博客积分: 2110
  • 博客等级: 大尉
  • 技术积分: 1018
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-23 19:36
文章分类

全部博文(96)

文章存档

2013年(2)

2012年(17)

2011年(77)

分类: LINUX

2012-12-18 12:25:36

===================================
file1.c

#include
int test()
{
    printf("in file file1.c\n");
    return 0;
}

===================================
file1.h
int test();

===================================
用以上两个文件生成.so
gcc file1.c -fPIC -shared -o libfile1.so

如果要将多个*.o文件编译成库的时候,可以用如下
gcc -c filex.c -o filex.o (一般文件)
gcc -c -fPIC file1.c -o file1.o
gcc -shared filex.o file1.o -o libfile1.so

生成so后,可以使用ldd命令,测试是否动态链接,如果正常显示链接,说明ok,如果提示not found则有问题。编译测试文件test。
#include
#include "file1.h"

int main()
{
    test();
    return 0;
}

ldd test
===================================

file2.c
#include
#include "file1.h" //用到库的头文件需指定

int main()
{
    test();
    return 0;
}

===================================
测试程序动态使用库中的函数test()
gcc file2.c -L. -lfile1 -o file2
===================================
在2个地方需要用到so
1. 在编译需要用到库内容,需要指定库的路径
在编译的时候可以通过-L -l(小L)
-L.  在编译的时候要链接的so的路径,'.'为当前目录
-l, 执行库的名字,有隐含规则。如libudev.so,写为-ludev

2. 执行用到库内容的可执行文件的时候,可执行文件需要能访问到链接库
(1)这种方式最简单,将*.so放入/lib
(2)修改LD_LIBRARY_PATH
(3)修改/etc/ld.so.conf



阅读(3378) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~