编辑四个文件: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库文件的生成与使用相关推荐

  1. 【Linux】Linux下静态库(.a)和动态库(.so)的制作和使用

    如有错误,欢迎大家指正,感谢! ​​​​​​​目录 一.程序工作过程简单介绍 1. 安装GCC 2. 源程序工作流程 3. 使用示例 4. gcc常用的编译参数选项 二.静态库的制作及使用 1. 库是 ...

  2. Linux下的LD_PRELOAD环境变量与库打桩

    Linux下的LD_PRELOAD环境变量与库打桩 LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的 ...

  3. Linux下构建自己的C++共享库并配合pkg-config生成链接选项

    Linux下构建自己的C++共享库并配合pkg-config生成链接选项 本文将以C++链表的新建.打印操作为例构建自己的共享库,并在实际调试代码时尝试使用.我们在做数据结构题时经常需要将链表打印出来 ...

  4. linux格式化gat分区,Linux 下使用udev永久绑定带库设备方法

    Linux 下使用udev永久绑定带库设备方法 在Linux 系统下配置带库设备,传统的方法是当安装完lin_tape驱动后会在/dev/路径下生成IBMtape,IBMchanger 这样的驱动设备 ...

  5. Linux下静态编译的一个TIP

    Linux下静态编译的一个TIP | 素包子 Linux下静态编译的一个TIP 2010年3月28日 baoz 阅读评论 linux下静态编译好处很多,一来是可以跨发行版(debian redhat ...

  6. Linux下静态路由配置命令

    linux下静态路由修改命令 方法一: 添加路由 route add -net 192.168.1.0/24 gw 192.168.1.1 route add -host 192.168.1.8 de ...

  7. Linux下Brit 导出pdf,word等文件的时候echarts的X轴或者Title乱码问题

    Linux下Brit 导出pdf,word等文件的时候echarts的X轴或者Title出现中文乱码问题 问题:当我们在Windows开发项目中使用eclipse的birt插件时,其中birt的ech ...

  8. Linux下程序崩溃dump时的 core文件的使用方法

    Linux下程序崩溃dump时的 core文件的使用方法 1.在启动程序前执行 ulimit -c unlimited unlimited 表示生成文件的大小限制,也可以修改为自定义的大小,例如: u ...

  9. linux下执行shell脚本文件,Linux下使用shell脚本自动执行脚本文件

    搜索热词 以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 #将tomcat中 ...

  10. linux比较两个文件md5,linux下如何批量比对两个文件的MD5值是否一致,SHA1是否一致。...

    linux下如何批量比对两个文件的MD5值是否一致,SHA1是否一致.如下所示: #!/bin/bash SOURCE_DIR="/home/walkerjava/source/" ...

最新文章

  1. DFT命令脚本系列1-
  2. 企业微信oauth认证_OAuth2身份认证
  3. KDE应用如何在GNOME环境下运行?
  4. Python中静态方法的实现
  5. 错误:Failed to start component [StandardEngine[Catalina].StandardHost[local
  6. Oracle 9i for RedHat Linux 的安装
  7. rn php,RN和React路由详解及对比
  8. 力扣-1128 等价多米诺骨牌对的数量
  9. L3-001 凑零钱 (30 分)—团体程序设计天梯赛
  10. linux根据部署jenkins
  11. React在ESLint下的报错收录(react-hooks/exhaustive-deps)
  12. 企业网站建设为什么要定制开发?
  13. 计算机强制关机后无法正常启动,​window7强制关机之后无法正常启动修复方法...
  14. [apifox学习笔记]在所有接口中添加登录后获取的token(有图示)
  15. 讯搜 配置mysql_迅搜使用指南
  16. vue+axios 实现Excel下载
  17. 在Centos7上安装osp
  18. IT人才招聘一位资深HR前辈写给新人的成长启示录
  19. 阿里云要分拆上市,腾讯云、百度云跟不跟?
  20. 基于J2EE架构的在线考试系统-Java(报告+源码+PPT

热门文章

  1. java反射作用与意义
  2. Java 基础 匿名对象
  3. java web filter 入口_springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径
  4. (CPSCA's)CPOJC+VIJOS
  5. 解决QT编程出现 C2001错误
  6. Win32中GDI+应用(一)
  7. POJ 1573机器人走迷宫
  8. ATL COM类之激活
  9. document.getElementsByName , document.getElementsByTagName ,document.createElement
  10. 【初级04】JVM线程模型