Linux下静态库.a与.so库文件的生成与使用
编辑四个文件:A1.c A2.c A.h test.c
A1.c:
#include <stdio.h>
void print1(int arg){
printf("A1 print arg:%d\n",arg);
}
A2.c:
#include <stdio.h>
void print2(char *arg){
printf("A2 printf arg:%s\n", arg);
}
A.h
#ifndef A_H
#define A_H
void print1(int);
void print2(char *);
#endif
test.c:
#include <stdlib.h>
#include "A.h"
int main(){
print1(1);
print2("test");
exit(0);
}
1、静态库.a文件的生成与使用。
1.1、生成目标文件(xxx.o)
---> gcc -c A1.c A2.c
1.2、生成静态库.a文件
---> ar crv libafile.a A1.o A2.o
1.3、使用.a库文件,创建可执行程序(若采用此种方式,需保证生成的.a文件与.c文件保存在同一目录下,即都在当前目录下)
---> gcc -o test test.c libafile.a
---> ./test
2、共享库.so文件的生成与使用
2.1、生成目标文件(xxx.o)(此处生成.o文件必须添加"-fpic"(小模式,代码少),否则在生成.so文件时会出错)
---> gcc -c -fpic A1.c A2.c
2.2、生成共享库.so文件
---> gcc -shared *.o -o libsofile.so
2.3、使用.so库文件,创建可执行程序
---> gcc -o test test.c libsofile.so
---> ./test
发现出现错误:
./test: error while loading shared libraries: libsofile.so: cannot open shared object file: No such file or directory
运行ldd test,查看链接情况
ldd test
linux-vdso.so.1 => (0x00007fff0fd95000)
libsofile.so => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f937b5de000)
/lib64/ld-linux-x86-64.so.2 (0x0000563f7028c000)
发现确实是找不到对应的.so文件。
这是由于linux自身系统设定的相应的设置的原因,即其只在/lib and /usr/lib下搜索对应的.so文件,故需将对应so文件拷贝到对应路径。
--->sudo cp libsofile.so /usr/lib
再次执行./test,即可成功运行。
---> ./test
同时可直接使用gcc -o test test.c -L. -lname,来使用相应库文件
其中,
-L.:表示在当前目录下,可自行定义路径path,即使用-Lpath即可。
-lname:name:即对应库文件的名字(除开lib),即若使用libafile.a,则name为afile;若要使用libsofile.so,则name为sofile)。
Linux下静态库.a与.so库文件的生成与使用相关推荐
- 【Linux】Linux下静态库(.a)和动态库(.so)的制作和使用
如有错误,欢迎大家指正,感谢! 目录 一.程序工作过程简单介绍 1. 安装GCC 2. 源程序工作流程 3. 使用示例 4. gcc常用的编译参数选项 二.静态库的制作及使用 1. 库是 ...
- Linux下的LD_PRELOAD环境变量与库打桩
Linux下的LD_PRELOAD环境变量与库打桩 LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的 ...
- Linux下构建自己的C++共享库并配合pkg-config生成链接选项
Linux下构建自己的C++共享库并配合pkg-config生成链接选项 本文将以C++链表的新建.打印操作为例构建自己的共享库,并在实际调试代码时尝试使用.我们在做数据结构题时经常需要将链表打印出来 ...
- linux格式化gat分区,Linux 下使用udev永久绑定带库设备方法
Linux 下使用udev永久绑定带库设备方法 在Linux 系统下配置带库设备,传统的方法是当安装完lin_tape驱动后会在/dev/路径下生成IBMtape,IBMchanger 这样的驱动设备 ...
- Linux下静态编译的一个TIP
Linux下静态编译的一个TIP | 素包子 Linux下静态编译的一个TIP 2010年3月28日 baoz 阅读评论 linux下静态编译好处很多,一来是可以跨发行版(debian redhat ...
- Linux下静态路由配置命令
linux下静态路由修改命令 方法一: 添加路由 route add -net 192.168.1.0/24 gw 192.168.1.1 route add -host 192.168.1.8 de ...
- Linux下Brit 导出pdf,word等文件的时候echarts的X轴或者Title乱码问题
Linux下Brit 导出pdf,word等文件的时候echarts的X轴或者Title出现中文乱码问题 问题:当我们在Windows开发项目中使用eclipse的birt插件时,其中birt的ech ...
- Linux下程序崩溃dump时的 core文件的使用方法
Linux下程序崩溃dump时的 core文件的使用方法 1.在启动程序前执行 ulimit -c unlimited unlimited 表示生成文件的大小限制,也可以修改为自定义的大小,例如: u ...
- linux下执行shell脚本文件,Linux下使用shell脚本自动执行脚本文件
搜索热词 以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 #将tomcat中 ...
- linux比较两个文件md5,linux下如何批量比对两个文件的MD5值是否一致,SHA1是否一致。...
linux下如何批量比对两个文件的MD5值是否一致,SHA1是否一致.如下所示: #!/bin/bash SOURCE_DIR="/home/walkerjava/source/" ...
最新文章
- DFT命令脚本系列1-
- 企业微信oauth认证_OAuth2身份认证
- KDE应用如何在GNOME环境下运行?
- Python中静态方法的实现
- 错误:Failed to start component [StandardEngine[Catalina].StandardHost[local
- Oracle 9i for RedHat Linux 的安装
- rn php,RN和React路由详解及对比
- 力扣-1128 等价多米诺骨牌对的数量
- L3-001 凑零钱 (30 分)—团体程序设计天梯赛
- linux根据部署jenkins
- React在ESLint下的报错收录(react-hooks/exhaustive-deps)
- 企业网站建设为什么要定制开发?
- 计算机强制关机后无法正常启动,​window7强制关机之后无法正常启动修复方法...
- [apifox学习笔记]在所有接口中添加登录后获取的token(有图示)
- 讯搜 配置mysql_迅搜使用指南
- vue+axios 实现Excel下载
- 在Centos7上安装osp
- IT人才招聘一位资深HR前辈写给新人的成长启示录
- 阿里云要分拆上市,腾讯云、百度云跟不跟?
- 基于J2EE架构的在线考试系统-Java(报告+源码+PPT
热门文章
- java反射作用与意义
- Java 基础 匿名对象
- java web filter 入口_springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径
- (CPSCA's)CPOJC+VIJOS
- 解决QT编程出现 C2001错误
- Win32中GDI+应用(一)
- POJ 1573机器人走迷宫
- ATL COM类之激活
- document.getElementsByName , document.getElementsByTagName ,document.createElement
- 【初级04】JVM线程模型