[TOC]静态库先说说我们为什么需要库?当有些代码我们大量会在程序中使用比如(scanf,printf等)这些函数我们需要在程序中频繁使用,于是我们就把这些代码编译为库文件,在需要使用时我们直接链接即可。定义: 程序在编译时把静态库的代码链接到可执行程序中,在代码运行时不再需要静态库。(简单理解就是把一堆.o文件打包到一起,当需要用到就让我们的程序链接进来)生成及使用方法:             
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                            精选
                                                        
                            2018-04-27 19:32:18
                            
                                3782阅读
                            
                                                        
                                点赞
                            
                                                                             
                 
                
                             
         
            
            
            
            前篇中的静态库有一个明显的缺点,当多个代码公用的库文件为静态库时,需要进行多次拷贝,造成大量重复的代码。主要需求为: 1、公用一份代码,大大节约执行文件的空间; 2、对于条件执行的代码,有可能出现代码进入可执行文件,但是却得不到运行的情况; 3、需要在启动或运行中需要用到时才实时加载进进程空间,并且            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2020-12-19 22:42:00
                            
                                132阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
             静态库是在可执行程序运行之前就已经加入执行码中,成为执行程序的一部分来执行的。动态库/共享库  是在执行程序启动            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-11-02 15:33:17
                            
                                118阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            主程序编译: gcc test.c -ldl -rdynamic动态库编译: gcc -shared -fPIC -nostartfiles -o mylib.so mylib.c主程序通过dlopen()加载一个.so的动态库文件, 然后动态库会自动运行 _init() 初始化函数, 初始化函数打印一个提示信息, 然后调用主程序的注册函数给结构体重新赋值, 然后调用结构体的函数指针,            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-09-23 13:43:25
                            
                                380阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             Linux 库类型Linux下可以创建两种类型的库:静态库(.a): 在链接期间被应用程序直接链接进可执行文件动态链接库(.so): 动态库还分为两种用法: a) 应用程序运行期间链接动态库,但是在编译期间声明动态库的存在,也就是说这种动态库必须在编译时对编译器可见,但编译器却不将此种库编译进可执行文件; b) 在运行期间,动态加载和卸载的库,使用动态加载方法加载。这种库的形式跟动态链接没有本质            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-05-24 14:32:18
                            
                                1684阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1. 静态库和动态库的基本概念 静态库,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大。动态库,是在可执行程序启动时加载到执行程序中,可以被多个可执行程序共享使用。使用动态库编译生成的程序相对较小,但运行时需要库文件支持,如果机器里没有这些库文件就不能运行。 2. 如何使用动态库 如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照/etc/ld.so.conf里面的配置搜...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2013-05-11 19:45:00
                            
                                276阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            【简介】 linux环境下的动态库一般名为libxxx.so, 用ldd命令分析某个可执行程序,可以看到该程序依赖哪些动态库,以及路径。 如 ldd ./test linux-vdso.so.1 => (0x00007fffaab52000) libc.so.6 => /lib64/libc.so.            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2018-02-01 23:30:00
                            
                                149阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            今天学习《深入理解Java虚拟机:JVM高级特性与最佳实践》一书,并动手在Linux系统上编译OpenJDK 7,初次搞不太顺利,特记录下编译操作细节。一、前期准备约定:工具默认安装目录是/usr/local/,若有源码,则源码存放在/usr/local/src/目录下,笔者用到的工具已打包上传到百度云:https://pan.baidu.com/s/1WhsQHJvduK75EBE8lQqq9g            
                
         
            
            
            
            1. 现在要生成libmydll.so的库文件,头文件如下#ifndef  _MYDLL_H#define  _MYDLL_H#include "stdio.h"#ifdef WIN32    #ifdef MYDLL_EXPORTS        #define MYDLLAPI  extern "C" __declspec(dllexport)    #else            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-05-03 02:58:16
                            
                                418阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、基本概念1.1什么是库在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。1.2库的种类linux下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。静态库            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                            精选
                                                        
                            2013-07-03 17:10:12
                            
                                947阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、首先,先引入为什么要有库,看下面的程序,也就是我们和一般写的程序差不多//结构树
tt
├── a.c
├── a.h
├── b.c
├── b.h
├── c.c
├── c.h
└── main.c
//a.h
#ifndef A_H
#define A_H
void a();
#endi            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2015-05-11 11:58:28
                            
                                530阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、GCC编译器的常用选项
1.1 gcc基本用法
    使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。
    GCC最基本的用法∶gcc [参数] [文件名称]
1.2 常用的参数
    -c 只编译:不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-06-14 20:53:22
                            
                                346阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在Linux中动态库的确给程序带来了良好的扩充性,并减少了内存的使用量,但这是有代价的。例如:#include <stdio.h>
int main(int argc, char *argv[])
{
       printf(“hello\n”);
       return 0;
}我们知道printf是在glibc中定义的,如果不适用动态库,而是将glibc静态链接到            
                
                    
                        
                                                            
                                                                        
                                                                推荐
                                                                                        原创
                                                                                    
                            2013-05-12 09:51:46
                            
                                8411阅读
                            
                                                        
                                点赞
                            
                                                                                    
                                1评论
                            
                                                 
                 
                
                             
         
            
            
            
            动态链接库是程序运行时加载的库,当动态链接库正确部署之后,运行的多个程序可以使用同一个加载到内存中的动态库,因此在 Linux 中动态链接库也可称之为共享库。动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的。库中函数和变量的地址使用的是相对地址(静态库中使用的是绝对地 ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-08-23 21:32:00
                            
                                1024阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            方法一:使用dlopen打开库并使用dlsym调用动态库中函数
dll.c文件
#include <stdio.h> #include <dlfcn.h  int main()  {      void *libc = NULL            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2013-02-19 17:16:23
                            
                                1991阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1.什么是库    在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的本质不同,因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。2.库的种类    linux下的库有两种:静态库和共享库(动态库)。动态通常用.so为            
                
         
            
            
            
            在linux 静态库简析中简要的介绍了静态库的相关东西,但在实际的工作中主要使用的是动态库,下面我们就来了解下动态库。什么是动态库动态库就是程序在运行时才会去链接库的代码,多个程序共享库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。动态库的优缺点优点:1.链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-13 09:38:07
                            
                                85阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
             
1.什么是库
在windows平台和linux平台下都大量存在着库。
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。
由于windows和linux的本质不同,因此二者库的二进制是不兼容的。
本文仅限于介绍linux下的库。
 
2.库的种类
linux下的库有两种:静态库和共享库(动态库)。
二者的不同点在于代码被载入的时刻不同。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                            精选
                                                        
                            2010-08-25 10:59:39
                            
                                618阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             Linux下静态库与动态库的使用 Linux下有静态链接库和动态链接库两种,静态链接库的后缀名是.a,动态链接库的后缀名是.so,下面详细介绍: 静态链接库: 静态链接库是指程序在编译链接的过程中就把依赖的库插入到程序中,这样程序的运行就不需要这些库的支持,但缺点是文件变大,下面以一个例子介绍如何制作静态链接库: 有add.c和mul.c两个文件,分别实现两数相加与相乘: add            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-03-16 17:55:52
                            
                                268阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            关于Unix静态库和动态库的分析 基本概念 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。 例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2013-01-28 19:10:00
                            
                                94阅读
                            
                                                                                    
                                2评论