码迷,mamicode.com
首页 > 系统相关 > 详细

linux下动态库的编写和调用

时间:2015-07-23 00:50:08      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:动态库   linux   

linux下动态库的编写和调用

linux下编写和调用一个简单的动态库大概分为以下几个步骤:
- 创建动态库程序文件
add.c

int add(int a,int b)
{
    return a+b;
}
  • 创建引用头文件
    head.c
#ifndef _HEAD_
#define _HEAD_

int add(int a,int b);


#endif
  • 生成目标文件
    生成要加编译器选项 -fpic
gcc -fpic  -c  add.c
  • 然后生成动态库
    注意使用链接器选项 -shared
gcc  -shared –o  libhead.so  add.o
  • 编写主程序进行调用
    main.c
#include <stdio.h>
#include "head.h"

int main(void)
{
    printf("3+5 sum = %d \n",add(3,5));
    return 0;
}
  • 生成可执行文件并链接库文件
    编译程序时,使用动态链接库和静态库是一致的,使用”-l库名”的方式。
 gcc -o  main  main.c -L  ./  -lhead

-L指定动态链接库的路劲,-ldXX链接库函数XX。-lXX是动态库的调用规则。Linux系统下的动态库命名方式是lib*.so,而在链接时表示位-l*,*是自己命名的库名。

  • 报错解决
error while loading shared libraries: libhead.so:  cannot open shared object file: No such file or directory

这是因为程序运行时没有找到动态链接库的原因,注意linux不会自动在当前目录查找动态库文件。解决方案一般有三种,借鉴博客园SmartVessel原文

  1. 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
ln -s /home/用户名/code/lib/*.so  /usr/lib
sudo ldconfig

注意填写你的动态库所在目录的路径,若不知道可以用pwd查看全路径。如果路径不对,可能会报错:

cannot open shared object file: Error 40

2.修改LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/home/用户名/code/lib/:$LD_LIBRARY_PATH
sudo ldconfig

3.修改/etc/ld.so.conf,然后刷新

vim /etc/ld.so.conf

add /home/用户名/code/lib/
sudo ldconfig

必须记得更新sudo ldconfig,否则还是会报错。

  • 运行测试
./main
3+5 sum = 8

好啦,测试成功,有问题可以留言讨论!

版权声明:本文为博主applebite原创文章,转载请注明出处。

linux下动态库的编写和调用

标签:动态库   linux   

原文地址:http://blog.csdn.net/applebite/article/details/47011221

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!