Linux下编写简单的动态链接库
来源:互联网 发布:会计记账软件免费版 编辑:程序博客网 时间:2024/05/20 03:40
Linux下编写简单的动态链接库
(1)Linux下编写动态链接库。通常静态链接库是编译的时候和源文件一起编译生成可执行文件的。动态链接库则不是,它是一个已经编译好的文件(静态则不是),只有当程序运行的时候(但是编译的时候要将动态链接库的信息加载进来),它才去找动态链接库拿它想用的一些函数。而且动态链接库可以提高通用性,编写一个动态链接库可以让很多人一起用。有点类似类?
test_so.h代码:
#ifndef _TEST_SO_H
#define _TEST_SO_H
#include <stdio.h>
#include <stdlib.h>
void test_a();
void test_b();
void test_c();
#endif
test_a.c代码:
#include "test_so.h"
void test_a()
{
printf("this is test_a()\n");
}
test_b.c代码:
#include "test_so.h"
void test_b()
{
printf("this is test_b()\n");
}
test_c.c代码:
#include "test_so.h"
void test_c()
{
printf("this is test_c()\n");
}
然后将这些文件编译为动态链接库gcc test_a.c test_b.c test_c.c --shared -fPIC -o libtest.so,则生成libtest.so文件(它已经编译好了),和普通可执行程序不同,它并没有main()。
(2)、再看如何编写main()
编写test.c代码:
#include "test_so.h"
int main(void)
{
test_a();
test_b();
test_c();
return 0;
}
gcc test.c -L . -libtest.so -o test ((-L .)表示动态链接库在本目录)。
然后通过ldd ./test查看有哪些动态链接库和可执行程序有关联。
结果发现libtest.so没有关联。
运行./test出现:
./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
也就是说找不到这个动态链接库,但是我们已经在编译test.c的时候加入路径了?
(3)、这时候修改LD_LIBRARY_PATH变量
#vim ~/.bashrc
添加:
LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/home/xxx/Test
export LD_LIBRARY_PATH
退出以后
#source ~/.bashrc
或者/etc/ld.so.conf添加动态链接库的路径。
#vim /etc/ld.so.conf
添加一行:/home/xxx/Test
然后刷新一把
#/sbin/ldconfig -v
再编译执行成功。
(1)Linux下编写动态链接库。通常静态链接库是编译的时候和源文件一起编译生成可执行文件的。动态链接库则不是,它是一个已经编译好的文件(静态则不是),只有当程序运行的时候(但是编译的时候要将动态链接库的信息加载进来),它才去找动态链接库拿它想用的一些函数。而且动态链接库可以提高通用性,编写一个动态链接库可以让很多人一起用。有点类似类?
test_so.h代码:
#ifndef _TEST_SO_H
#define _TEST_SO_H
#include <stdio.h>
#include <stdlib.h>
void test_a();
void test_b();
void test_c();
#endif
test_a.c代码:
#include "test_so.h"
void test_a()
{
printf("this is test_a()\n");
}
test_b.c代码:
#include "test_so.h"
void test_b()
{
printf("this is test_b()\n");
}
test_c.c代码:
#include "test_so.h"
void test_c()
{
printf("this is test_c()\n");
}
然后将这些文件编译为动态链接库gcc test_a.c test_b.c test_c.c --shared -fPIC -o libtest.so,则生成libtest.so文件(它已经编译好了),和普通可执行程序不同,它并没有main()。
(2)、再看如何编写main()
编写test.c代码:
#include "test_so.h"
int main(void)
{
test_a();
test_b();
test_c();
return 0;
}
gcc test.c -L . -libtest.so -o test ((-L .)表示动态链接库在本目录)。
然后通过ldd ./test查看有哪些动态链接库和可执行程序有关联。
结果发现libtest.so没有关联。
运行./test出现:
./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
也就是说找不到这个动态链接库,但是我们已经在编译test.c的时候加入路径了?
(3)、这时候修改LD_LIBRARY_PATH变量
#vim ~/.bashrc
添加:
LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/home/xxx/Test
export LD_LIBRARY_PATH
退出以后
#source ~/.bashrc
或者/etc/ld.so.conf添加动态链接库的路径。
#vim /etc/ld.so.conf
添加一行:/home/xxx/Test
然后刷新一把
#/sbin/ldconfig -v
再编译执行成功。
0 0
- Linux下编写动态链接库的简单过程
- Linux下编写简单的动态链接库
- Linux下编写动态链接库的简单过程
- Linux下编写简单的动态链接库
- Linux下动态链接库的编写
- Linux下动态链接库的编写
- Linux动态链接库的简单编写与使用
- 在linux下编写动态链接库的步骤:
- 在linux下编写动态链接库的步骤
- 在linux下编写动态链接库的步骤
- 在linux下编写动态链接库的步骤
- 在linux下编写动态链接库的步骤
- 在linux下编写动态链接库的步骤
- 在linux下编写动态链接库的步骤
- Linux下编写动态链接库
- linux下如何编写动态链接库
- 在linux下编写动态链接库
- linux下编写动态链接库文件
- Android多线程断点续传下载的实现
- 【数据结构】回顾二叉树
- 技术要点
- 07-图5. 旅游规划(25)
- Xcode插件
- Linux下编写简单的动态链接库
- 不用临时的变量 交换两个数的两种方法
- iOS系类教程之用instruments来检验你的app
- 黑马程序员-----基础加强-注解,类加载器
- 5分钟搞定内存字节对齐
- 算法导论笔记:21用于不相交集合的数据结构
- LeetCode1 TwoSum
- iOS开发--修复iOS7以上自定义LeftBarbuttonItem后向右偏移
- 【转载】实实在在说多态