制作动态库并使用
来源:互联网 发布:逻辑回归 知乎 编辑:程序博客网 时间:2024/05/21 17:52
1、制作动态库
第一步:demo.c demo.h
/* demo.c */#include <stdio.h>void func1(void){ printf("func1 in demo.c.\n");}int func2(int a,int b){ printf("func2 in demo.c.\n"); return a+b;}/* demo.h */void func1(void);int func2(int a, int b);
第二步:制作动态库
gcc -c demo.c -o demo.o -fPICgcc -o libdemo.so demo.o -shared
-fPIC是位置无关码,-shared是按照共享库的方式来链接。
第三步:发布动态链接库时,发布libxxx.so和xxx.h即可。
2、使用共享库
#include "demo.h"#include <stdio.h>int main(void){ func1(); int a = func2(4, 5); printf("a = %d.\n",a); return 0;}
gcc test.c -o test -ldemo -L.
编译成功,但是运行出错。
./test: error while loading shared libraries: libdemo.so: cannot open shared object file: No such file or directory
错误原因:动态链接库运行需要被加载(运行环境在执行test程序的时候发现动态链接了libdemo.so,于是会去固定目录尝试加载libdemo.so,如果加载失败则会输出以上错误信息)。
解决方法一:将libdemo.so放到固定目录下就可以了,这个固定目录一般是/usr/lib目录。cp libdemo.so /usr/lib即可。
解决方法二:使用环境变量LD_LIBRARY_PATH。操作系统在加载固定目录/usr/lib之前,会先去LD_LIBRARY_PATH这个环境变量所指定的目录去寻找,如果找到就不用去/usr/lib下面找了,如果没有找到再去/usr/lib下面找。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库的目录
3、ldd命令的作用
可以在一个使用了共享库的程序执行之前,解析出这个程序使用了哪些共享库,并且查看这些共享库是否能被加载并解析(决定这个程序是否能被正确执行)。
#:/work/c_test$ ldd test linux-gate.so.1 => (0x0015a000) libdemo.so => not found libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00955000) /lib/ld-linux.so.2 (0x00b4f000)
阅读全文
0 0
- 制作动态库并使用
- 自己制作静态和动态链接库并使用
- 静态、动态库制作使用
- VC成功制作并使用lib库
- Xcode_制作并使用静态类库
- 制作静态链接库并使用
- 制作并使用initramfs
- linux静态动态库制作和使用
- 编译sqlite动态链接库并使用
- Window创建并使用动态链接库
- 制作并使用静态类库(Static Library)详细教程
- 制作并使用静态类库(Static Library)
- 制作并使用静态类库(Static Library)详细教程
- 【VC++6.0】成功制作并使用lib库(原创)
- 制作动态库
- mfc制作动态库
- 动态库制作
- 动态库的制作
- 查频段
- Valid Parentheses
- 多线程编程需要注意的问题
- 【Linux】SecureCRT的快捷键
- Spring+Springmvc+Hibernate框架搭建
- 制作动态库并使用
- 实际工作:----Redis之——Spring基于注解整合Redis
- Java语言实现二进制与十进制间转换
- 一 视频播原理
- grep ,sed ,awk
- 网络图片浏览器
- 设计模式:单例模式- 饿汉式实现
- tomcat环境变量配置
- Office2013下载安装破解