首页 > 其他分享 >链接库

链接库

时间:2023-06-19 19:45:40浏览次数:28  
标签:可执行文件 文件 -- 链接库 include 链接

静态库和动态库

编译: 对源文件做词法分析、语法分析、语义分析等操作,最终生成多个目标文件(二进制文件中会有一个main函数的标识符)

链接: 对于各个目标文件中缺失的函数和变量的存储地址(后续简称“缺失的地址”),由链接器负责修复,并最终将所有的目标文件和链接库组织成一个可执行文件

库文件重复使用的代码块

链接库是二进制文件,但无法独立运行,必须等待其它程序调用,才会被载入内存

hello.cpp这样的"开源"的库文件很难找到,多数程序员并不会直接分享源代码,他们更愿意分享库文件的二进制版本——链接库

链接器可以在两个地方起作用: 编译和运行阶段

静态链接库无论缺失的地址在目标文件中还是链接库中, 链接器都逐个找到它们, 然后生成整个可执行文件, 这个可执行文件可以独立载入内存. 链接的这些链接库, 叫做静态链接库

动态链接库链接器先从所有目标文件中找到一部分缺失的地址, 生成可执行文件. 此时仍缺失部分函数和变量的地址, 代文件执行时, 需连同剩余的的链接库文件一起载入内存, 再由链接器修复剩余缺失的地址. 这些剩余的链接库叫做动态链接库.

静态库 动态库
编译时链接到可执行文件中 运行时链接
Linux中 .a .so
Windows .lib .dll
每一个可执行文件一份 一份, 可共用

依赖管理

这样,使用者C只需要把A的include文件夹设置为include directory,便可以使用A库所提供的功能了

如果引用src中的东西, 容易造成代码混乱. 引用include能够避免.

A --
   |--src
       |--A.h
       |--A.cpp
   |--include
       |--A.h

B --
   |--include
       |--B.h

include中代码, 引用真正的 A.h

#include "../src/A.h"

标签:可执行文件,文件,--,链接库,include,链接
From: https://www.cnblogs.com/Long23/p/17491626.html

相关文章

  • Linux系统下如果在编译时指定程序运行时动态链接库相对目录,及为程序收集默认不安装动
    1、在编译中指定编译的程序去查找的动态链接库目录qmake是这样指定运行时动态库目录的:  QMAKE_LFLAGS+=-Wl,-rpath=/usr/local/ultrasec/policyfilter/lib/ 2、用lddPROG  查看程序的动态链接库,如果没有的动态链接库,就从其它计算机或者网络上找这个库,然后拷贝到指......
  • 使用.net4引用Delph写的动态链接库DLL,you经验的大佬看一下
    vs2017、net4、无法引用?是Delph动态链接库的问题吗?也把dll放bin同目录底下啦这个是用vs打开的dll是机器代码请有经验的大佬指点一手......
  • 无法定位程序输入点于动态链接库怎么办?电脑无法定位动态链接库什么意思?
    http://server.sosol.com.cn/server/2022/0801/23414.html一、重装软件当我们的电脑出现无法定位程序输入点于动态链接库的时候,可以先尝试把软件卸载,因为有可能是系统的软件没有及时更导致的,可以卸载了然后下载最新版的软件; 二、在看到该错误提示框后,记录下框里提示的那个.dl......
  • Windows 下 JNA 调用动态链接库 dll
    1.创建动态链接库项目创建jnaTest项目下一步中填写项目名称和存储的目录;然后直接创建即可创建结果2.定义头文件#pragmaonce#ifndefJNA_TEST_H#defineJNA_TEST_H#ifdef__cplusplusextern"C"{#endif__declspec(dllexport)intadd(inta,intb);__declspec......
  • opencv 无法使用 dll 动态链接库 UnsatisfiedLinkError java.library.path Can‘t fin
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME)使用如上方法加载本地dll文件。 一般会出现两种错误:1、UnsatisfiedLinkErrorjava.library.path  2、UnsatisfiedLinkError Can'tfinddependentlibraries 第一种错误为没有加载到指定的dll文件,该配置可以百度搜索java.li......
  • Python3源码编译和使用静态链接库lib&动态链接库dll详细介绍
    说明:本文主要介绍:1.python3源码的下载和编译内核工程(pythoncore)2.编译的lib和dll使用例子。若需要编译源码PCBuild下其他python工程,类似参考内核工程(pythoncore)编译的方式进行配置即可。一.python源码下载1.进入python官方网站:PythonSourceReleases|Python.org2.选择......
  • c#工业自动化控制链接开发库(注意是DLL文件,链接库,非源码)。
    c#工业自动化控制链接开发库(注意是DLL文件,链接库,非源码)。1、PLC通信功能:包含(倍福,ab,欧姆龙,西门子,三菱,松下,信捷PLC);2、modbus通信功能:包含RTU,RTU,Tcp,server等;3、Socket功能:包含UDP、TCP、TCPServer以及IOCP高并发Socket等功能,均支持同步异步;4、OPC通信功能:支持Com组件形式的OPC客......
  • MFC-动态链接库
    创建项目 framework.h文件该文件在编译Dll时需要将所有在你的项目中需要使用的头文件包含进去 关于dllmain.cppDLL程序入口点函数DllMain:仅导出资源的DLL可以没有DllMain函数  参数1:HMODULEhModule  指向DLL本身的实例句柄参数2:DWORD ul_reason_for_call ......
  • P48静态链接库-动态链接库
    静态编译:优点:实现代码的重复使用方便缺点:将二进制代码直接编译到exe中反汇编无法识别使用静态链接生成的可执行文件体积较大,造成浪费 我们常用的printf、memcpy、strcpy等就来自这种静态库 静态链接库的代码在lib中而动态链接库的代码在dll里面创建静态链接库: ......
  • MFC-GetProcAddress获取动态链接库中函数的地址
     HMODULEhmodule=::GetModuleHandle(_T("kernel32.dll"));//获取动态链接库的模块句柄typedefDWORD(*p)(void);//声明函数指针数据类型charch[]="GetCurrentThreadId";//【特别注意:这个函数名必须是ANSI的char类型】pf=(p):......