静态库使用

VS中静态库的创建及使用 一、什么是静态库 以“.lib”为后缀名的文件是静态库。静态库可以实现代码复用,模块封装等功能。 二、静态库的创建步骤 此文以vs2019为开发工具创建静态库。 1、打开VS2019,“创建新项目->静态库->下一步->创建”。如下图所示: 项目创建完成后如下图所示,编译器会自动添加几个源文件和头文件。 2、创建与源文件同名的头文件。(注意:如果编译器创建的是一个空的静态库项目,则需要同时添加源文件"StaticLibTest.cpp"和头文件"StaticLibTest.h")。 阅读详情

Linux 中的应用程序以以下两种方式之一链接到外部函数:要么在构建时与静态库( lib*.a)静态地链接,并且将库代码包含在该应用程序的可执行文件里;要么在运行时与共享库( lib*.so)动态地链接。通过动态链接装入器,将动态库映射进应用程序的可执行内存中。在启动应用程序之前,动态链接装入器将所需的共享目标库映射到应用程序的内存,或者使用系统共享的目标并为应用程序解析所需的外部引用。现在应用程序就可以运行了。

 

先介绍静态库:

静态函数库实际上就是简单的一个普通的目标文件的集合,一般来说习惯用“.a”作为文件的后缀。可以用ar这个程序来产生静态函数库文件。Ar 是archiver的缩写。静态函数库现在已经不在像以前用得那么多了,主要是共享函数库与之相比较有很多的优势的原因。慢慢地,大家都喜欢使用共享函数 库了。不过,在一些场所静态函数库仍然在使用,一来是保持一些与以前某些程序的兼容,二来它描述起来也比较简单。

静态库函数允许程序员把程序link起来而不用重新编译代码,节省了重新编译代码的时间。不过,在今天这么快速的计算机面前,一般的程序的重新 编译也花费不了多少时间,所以这个优势已经不是像它以前那么明显了。静态函数库对开发者来说还是很有用的,例如你想把自己提供的函数给别人使用,但是又想 对函数的源代码进行保密,你就可以给别人提供一个静态函数库文件。理论上说,使用ELF格式的静态库函数生成的代码可以比使用共享函数库(或者动态函数 库)的程序运行速度上快一些,大概1-5%。

假设有下面几个文件:String.h,Strlen.c,Strlnen.c:
String.h
,声明相关函数原形;
/***********************************
Filename : String.h
Description :
Author   : HCJ
Date     : 2006-5-7
************************************/
int Strlen(char *pStr);
int StrNlen(char *pStr, unsigned long ulMaxLen);

Strlen.c:函数Strlen的实现,获取给定字符串的长度;
/**************************************
Filename    : get string length
Description :
Author      : HCJ
Date        : 2006/5/7
**************************************/
#include<stdio.h>
#include<assert.h>
int Strlen(char *pStr)
{
    unsigned long ulLength;
    assert(NULL != pStr);

    ulLength = 0;
    while(*pStr++)
    {
        ulLength++;
    }
    return ulLength;
}

Strlnen.c:函数StrNlen的实现,获取给定字符串的长度,如果输入字符串的长度大于指定的最大长度,则返回最大长度,否者返回字符串的实际长度;
/**********************************************
Fileneme: mystrnlen.c
Description: get input string length,if string large
             max length input return max length,
             else real length
Author: HCJ
Date : 2006-5-7
**********************************************/
#include<stdio.h>
#include<assert.h>

int StrNlen(char *pStr, unsigned long ulMaxLen)
{
    unsigned long ulLength;
    assert(NULL != pStr);
    if(ulMaxLen <= 0)
    {
        printf("Wrong Max Length!\n");
        return -1;
    }
    ulLength = 0;
    while(*pStr++ && ulLength < ulMaxLen)
    {
        ulLength++;
    }
    return ulLength;
}

生成静态链接库:
利用GCC生成对应目标文件:
#>gcc –c Strlen.c Strnlen.c
如果对应的文件没有错误,gcc会对文件进行编译生成Strlen.o和Strnlen.o两个目标文件(相当于windows下的obj文件)。然后用ar创建一个名字为libstr.a的库文件,并把Strlen.o 和Strnlen.o的内容插入到对应的库文件中。,相关命令如下:
#>ar –rc libstr.a Strlen.o Strnlen.o
命令执行成功以后,对应的静态库libstr.a已经成功生成。

静态库的使用:
假设有下面的文件要使用对应的的静态库:
编译生成对应的目标文件:

#>gcc -c -I/home/hcj/xxxxxxxx main.c
生成可执行文件:
#>gcc -o main1 -L/home/hcj/xxxxxxxx main.o libstr.a
其中-I/home/hcj/xxxxxxxx和-L/home/hcj/xxxxxxxx是通过-I和-L指定对应的头文件和库文件的路径。libstr.a是对应的静态库的名称。这样对应的静态库已经编译到对应的可执行程序中。执行对应的可执行文件便可以对应得函数调用的结果。

/*****************************************
FileName: main.c
Description: test static/dynamic library
Author: HCJ
Date : 2005-5-7
******************************************/
#include<stdio.h>
#include “String.h”   //
静态库对应函数的头文件

int main(int argc, char* argv[])
{
    char str[] = {"hello world"};
    unsigned long ulLength = 0;

    printf("The string is : %s\n", str);
    ulLength = Strlen(str);
    printf("The string length is : %d(use Strlen)\n", ulLength);
    ulLength = StrNlen(str, 10);
    printf("The string length is : %d(use StrNlen)\n", ulLength);

    return 0;
}

Xcode 之自己编译静态库 今天介绍下,如何利用Xcode, 阅读详情

相关推荐

C/C++ 静态库(lib)的概念和使用方法

lib文件的作用及使用

m0_62599305的博客 2万+

静态库的使用方法

静态库的使用简单介绍

春秋繁露 5619

Anaconda离线创建python环境

既然是离线创建python环境,就需要有一个已经创建好的python环境。所以我们有两台win10的机器,分别是A和B。两台机器都安装了anaconda。其中A可以连网,因此我们在A上创建好一个python2.7的环境py27,然后将py27移植(安装)到B上。B连不连网都无所谓。 一、机器上A上创建python2.7的环境py27 有两种方法: 方法1:使用Anaconda的图形界面。首先,点击Environments->Create,然后输入要创建的环境名称"py27",然后选择2.7,如图

FY_2018的博客 6787

静态库(lib)和动态库(dll)的使用

静态库(lib)和动态库(dll)的理解与使用前言一、函数重载的理解二、extern “C” 的理解三、静态库的调用1.静态库的生成2.静态库的调用四、动态库的调用1.动态库的生成2.动态库的调用 前言 说明   静态库和动态库在windows软件开发当中很常用,好的软件架构很多功能都是以库的形式存在,假如该功能需要升级,则直接替换该库文件就行,不需要把整个程序进行升级。这样维护起来就比较方便。   常见的库文件有.lib和.dll两种形式,分别是静态库和动态库。   静态库在形成exe文..

张一西的博客 8329

Evolution of Heuristics: Towards Efficient Automatic Algorithm Design Using Large Language Model

启发式算法广泛用于处理复杂的搜索和优化问题。然而,启发式算法的手动设计通常非常耗费人力,需要丰富的工作经验和知识。本文提出了启发式算法的进化 (EoH),这是一种新颖的进化范式,它利用大型语言模型 (LLM) 和进化计算 (EC) 方法进行自动启发式设计 (AHD)。EoH 代表自然语言中的启发式概念,称为思想。然后由 LLM 将它们转换为可执行代码。进化搜索框架中思想和代码的演变使其在生成高性能启发式算法方面非常有效和高效。

weixin_43961909的博客 2163

Cocos2d-x手游逆向实战:Frida高阶Hook与动态解密技术

Cocos2d-x作为主流跨平台游戏引擎,其混合架构(C++核心+JNI桥接+Lua/JS脚本)和强加固策略(符号剥离、anti-frida、so加壳)使传统逆向方法失效。本文围绕‘无符号定位’‘C++函数硬编码地址识别’‘Lua层AST级劫持’‘OpenGL内存回溯解密’四大关键技术展开,深入解析如何在真实上线项目中稳定hook被strip的libcocos2d.so关键函数、绕过反调试心跳检测、从glTexImage2D参数逆向追踪明文资源,并结合熵值扫描实现零先验知识的内存明文发现。面向已掌握Frid

weixin_30345577的博客 675

静态库制作与使用

1 静态库概念 其实库的概念。就是把一系列函数封装在一个二进制文件中,这一系列的函数的声明可以放在一个头文件中,写代码的时候直接包含头文件然后就可以直接使用库中的函数。在编译的时候要指定k ...

向上吧贺凯 849

Fastjson2 2.0.26反序列化漏洞深度剖析:从原理到PoC构造

本文深度剖析了Fastjson2在2.0.26及之前版本中存在的反序列化漏洞。该漏洞允许攻击者通过构造包含恶意TemplatesImpl对象的JSONArray,并利用BadAttributeValueExpException触发,在反序列化过程中实现远程代码执行。文章从漏洞原理、PoC构造、利用链分析到防御建议,提供了全面的技术解读,帮助开发者和安全人员理解其危害并采取应对措施。

d3e4f的博客 1051

Linux环境下创建并使用动静态库(动态链接与静态链接)

介绍什么是动态库和静态库,以及如何创建并使用动态库和静态库

challenglistic的博客 7084

YOLOv8改进策略【损失函数篇】| 替换Powerful-IoU(PIoU),增强对中等质量锚框的关注力,引导锚框更直接、高效地回归

现有基于IoU的损失函数存在不合理的惩罚因子,导致锚框在回归过程中出现面积扩大的问题,使得回归效率降低、收敛速度变慢。同时,这些损失函数在反映锚框与目标框之间的差异、考虑目标框大小以及某些情况下的性能表现等方面存在局限性。在目标检测任务中,边界框回归的损失函数对检测性能至关重要。Powerful-IoU(PIoU)及其升级版PIoU v2正是为解决现有损失函数存在的问题而设计的。本文利用PIoU改进YOLOv8的损失函数,提高模型精度。

Limiiiing的博客 673

《AgentScope-Java 深入浅出教程》第2章 环境搭建与第一个智能体

创建// 【导入说明】/*** 时间相关工具类* 工具类是普通的 Java 类,通过注解声明为工具。* 智能体可以根据用户需求自动调用这些工具。*/// 【工具定义】获取当前时间@Tool(name = "get_current_time", // 工具名称:LLM 看到的名称description = "获取指定时区的当前时间" // 工具描述:帮助 LLM 理解何时使用// 【参数定义】// @ToolParam 的 name 属性是必需的!

步子哥的博客 417

Xilinx SDK创建并使用静态库

Xilinx SDK创建并使用静态库创建静态库加载使用静态库添加静态库和头文件到目标工程链接到静态库 本文记录了利用Xilinx的SDK工具创建并使用静态库的方法,SDK版本号2019.1。 创建静态库 新建一个Library工程,如下图所示选中Library Project: 选择Next,库的类型选择Static Library, 平台选择Standalone,输入工程名称,如下图所示: ...

清心永恒的博客 1万+

【RK3399 Ubuntu】基于rk3399的lxde的lubuntu桌面移植适配记录之第二步:最基本Ubuntu根文件系统的相关常用工具完善

文章目录1.使能系统网络管理服务1.1 安装驱动modules管理工具1.2 使能网络服务2.终端自动补全命令功能3.安装ssh服务4.安装系统信息查看工具5.安装resize工具6.安装lrzsz工具7.使能rc.local服务7.1 修改服务Install块7.2 使能rc.local.service服务7.3 添加执行脚本且赋予执行权限 续接上文,本文主要完善前面已经制作好的rootfs 1.使能系统网络管理服务 1.1 安装驱动modules管理工具 apt-get install kmod 1.

wang 恒 的博客 1387

Opencv静态库,编译和调用静态库,静态库链接另一个静态库

Opencv静态库,编译和调用静态库,静态库链接另一个静态库,ubuntu qt

tony365的博客 7256

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

静态库使用另一个静态库

静态库使用 一、来由-决定思路 1、近期调试一个模块源码编译调用另一个静态库(B.a),最后生成静态库(C.a),最后用最终生成的静态库(C.a)编译出可执行文件的时候,提示报错了:在静态库(C.a)中,对‘fun’未定义的引用,很郁闷啊。 2、但是整成动态库,就不存在这个问题,为此检查了几遍CMakeList.txt文件,还是没能调出来。 3、最后就秉着你所遇到的问题,大多数已经被别人解决了原则...

weixin_46089486的博客 7119

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ios静态库依赖其他静态库_如何使用XCFramework构建通用的iOS静态库

ios静态库依赖其他静态库 模块化iOS (Modular iOS) Compiled static libraries are not easy to integrate with. A build only supports iOS simulators or devices but not both. To allow integrators use the static library f...

weixin_26638123的博客 1961

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

静态库调用其它静态库

在我们封装底层库的时候,有时会想能不能把底层的库直接打包进我们的库里,之前也一直有这样的疑问,最近终于把这个问题搞清楚了,如下: 编译静态库时只有编译过程,没有链接过程,静态库引用其它库并不会在编译的时候把引用的库函数编译到生成的lib中,只是简单的将编译后的中间文件打包,在编译最终的可执行项目(.exe和.dll)的时候,需要引用所有的库,进行符号消解。如果你需要封装,使用动态库。 ...

Captain--Jack 4899

xcode静态库的使用

转自:http://hi.baidu.com/bin545/item/4c0b2f9a6f7992db7b7f01ca xcode静态库的使用 一.基本知识 在实际的编程过程中,通常会把一些公用函数制成函数库,供其它程序使用,一则提搞了代码的复用;二则提搞了核心技术的保密程度。所以在实际的项目开发中,经常会使用到函数库,函数库分为静态库和动态库两种。和多数人所熟悉的动态语言和

wangwei0327的专栏 596

ios 静态库合成_iOS生成静态库方法-iOS集成静态库-iOS合并静态库

在iOS的开发过程中,我们常常用到第三方的库。尤其是QQ、百度地图、广告等。那么,如何制作自己的库文件呢?如果,将自己写的功能类编译成库文件,分发给其他人来使用呢?静态库的优点编译静态库的好处也还是有的!1.让自己的源码不被直接暴漏。2.需要使用时,仅仅拷贝相应的.h文件和.a文件就好,不用在将源码一一拷贝。方便。3.显得也比源码拷贝高端、大气一些。那么,废话就不多说了!准备动工!一、建立相应的静...

weixin_39607620的博客 344

c#生成静态库_C++静态库的创建和使用

一、什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a,.lib)和动态库(.so,.dll)。所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:二、静态库之所以称为静态库,是因为在链接阶段,会...

weixin_39716521的博客 912

封装一个静态库成新的静态库,及使用方法

参考 静态库调用静态库&静态库加载静态库------谈谈undefined reference to和linker input file unused because linking not done 如何编译静态库及将多个.a静态库合并成一个.a静态库 linux 编译 依赖静态库的静态库问题 问题 最近对一个静态库(例如liba.a)做封装后生成新的静态库libb.a供其它人使用,...

flfihpv259的博客 1527

静态库的使用

静态库的使用 <br /> Luo Weifeng  //1:15 2009/9/2 步骤: <br />1.在code::blocks中新建Static library 工程 在仅有的main.cpp中放置你所有想要包含的函数 <br />2.编译……成功 <br />3.切换到工程目录下找出生成的libname.a,则这个就是静态库 使用: <br />在code::blocks下建立c++工程,如下设置: <br />1.把你的lib文件链接进来 setting->compile

1112

Linux 静态库 编译和使用

前言: 不管是 Linux 还是 Windows 中的库文件其本质和工作模式都是相同的,只不过在不同的平台上库对应的文件格式和文件后缀不同。程序中调用的库是 静态库。 在项目中使用库一般有两个目的,一个是为了使程序更加简洁不需要在项目中维护太多的源文件,另一方面是为了源代码保密,毕竟不是所有人都想把自己编写的程序开源出来。 静态库: 在 Linux 中静态库由程序 ar 生成。 在 Linux 中静态库以 lib 作为前缀,以.a 作为后缀,中间是库的名字自己指定即可,即: libxxx.a 在 Windo

houxian1103的博客 1万+

【Linux】从零开始认识动静态库 - 静态库

本文讲解了静态库的建立与使用!!!

叫我龙翔的博客 1452

CMake 之静态库依赖动态库,如何使用该静态库

参考: 静态库链接动态库时,如何使用该静态库_newchenxf的专栏-优快云博客_链接静态库 1.先建立如下工程目录文件

zion--6135的博客 3085
上一篇: linux下创建用户,组
下一篇: linux huge page 设置
路人甲三号
博客等级 码龄18年 8粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值