首页 > 其他分享 >dll

dll

时间:2023-05-06 23:33:48浏览次数:32  
标签:lib 静态 代码 dll DLL include

目录:

1.静态dll使用

2.代码示例

 

静态dll

静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件

动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。在vs中新建生成动态库的工程,编译成功后,产生一个.lib文件和一个.dll文件

那么上述静态库和动态库中的lib有什么区别呢?

静态库中的lib:该LIB包含函数代码本身(即包括函数的索引,也包括实现),在编译时直接将代码加入程序当中

动态库中的lib:该LIB包含了函数所在的DLL文件和文件中函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供

总之,lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll

 

代码示例

 1 #include <iostream>
 2 #include<thread>
 3 #include<vector>
 4 #include<sys/timeb.h>
 5 #include<math.h>
 6 
 7 //调用dll,通过Properties/Linker/Input/Additional Dependence 加载lib
 8 #include"DllTest.h"
 9 
10 //静态调用dll,
11 //inlcude 头文件 + 固定格式 #pragma comment(lib,"dll.lib")
12 #include"cdll/Header.h"
13 #pragma comment(lib,"dll.lib")
14 
15 
16 
17 
18 using namespace std;
19 
20 void parallel(vector<vector<double>>& a, int index)
21 {
22     for (int i = index; i < index + 2000; i++)
23     {
24         for (int j = 0; j < 10000; j++)
25         {
26             a[i][j] = cos(1.05);
27         }
28     }
29 }

 

标签:lib,静态,代码,dll,DLL,include
From: https://www.cnblogs.com/rocky-chen/p/17378714.html

相关文章

  • ocidll forced to load library,initialization error could not initialize make sure
    是因为你使用pl/sql是64位的,但是软件只找到了32位的oracle客户端 多次尝试,我的pl/sql是64位,但是这里需要对应的使用64位,我的方案是下载https://www.allroundautomations.com/registered-plsqldev/ 这个版本的软件 这样配置,32位的使用,这里需要手动配置的,如果是64位的pl/......
  • 关于 “无法启动此程序,因为计算机中丢失mfc140.dll,尝试重新安装该程序已解决此问题”
      这个问题花了很久的时间百度,后来终于理解了dll文件的作用。VC运行库有必要下吗?VC++运行库有什么用?vc运行库里面包含的dll和ocx文件可以确保很多软件能够正常运行,因为有很多软件是用VC++语言编写的,那么在运行的时候也需要相应的运行库支持,下面系统之家小编来详细介绍一下V......
  • 解决OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll alread
    错误如下所示:OMP:Error#15:Initializinglibiomp5md.dll,butfoundlibiomp5md.dllalreadyinitialized.OMP:HintThismeansthatmultiplecopiesoftheOpenMPruntimehavebeenlinkedintotheprogram.Thatisdangerous,sinceitcandegradeperformanceorcau......
  • 恶意软件如何隐藏DLL以及如何识别它?——可以使用vmmmap、procexp、volatility 3
       好了,为了简单表示上述提到的PEB和DLL加载的关系,给一一张图如下:TEB(ThreadEnvironmentBlock,线程环境块)系统在此TEB中保存频繁使用的线程相关的数据。PEB(ProcessEnvironmentBlock,进程环境块)存放进程信息,每个进程都有自己的PEB信息。  上图可以看到dll清单类似o......
  • C# 调用 C dll char* callback 设置回调函数不定参数
    1:C#调用返回字符串C++nativedll函数的注意事项:a:C++DLL的返回值,安全的做法是分配一个全局char数组,把要返回的char*复制到这个char数组中, charbuff[255];constchar*__stdcallReturnString(){strcpy(buff,"xxxxxxxxxxxxxxx");returnbuff;}......
  • Python-运行库报错“ImportError: DLL load failed: 找不到指定的模块。”
    1.看到这个报错的一瞬间,以为是Pycharm有问题,加上公司的电脑,对于2020以后的版本的不适用,以为是Pycharm需要有改动。但是大费周章(不断安装卸载Pycharm)以后,依旧没有任何的改变。百度以后,说是第三方库的某个模块没有,让卸载三方库,重新安装。尝试过以后没有用。2.思考了两天,突然想到,这......
  • VC++ | DLL的创建和使用
    文章目录DLL的创建和使用动态链接库概述1.新建项目1-1.新建文件1-2.生成动态链接库2.Dumpbin命令2-1.用法3.从DLL中导出函数4.参考DLL的创建和使用动态链接库概述1.新建项目1-1.新建文件新建DLL1.cpp#include"pch.h"intadd(inta,intb){ return(a+b);}intsubtract(i......
  • Windows 下主程序与动态库(*.dll)释放对方分配的内存操作要点
    同样的代码程序:主程序中释放了一块在动态库(*.dll)或共享库(*.so)中分配的内存,Windows将会出现程序崩溃,而Linux则正常运行。 在linux下,每个进程只有一个heap ,在任何一个共享库模块*.so中通过new或者malloc来分配内存的时候都是从这个唯一的heap中分配的,那......
  • ImportError: DLL load failed while importing QtChart: 找不到指定的模块
    这个错误通常是由于您的Python环境缺少QtChart模块或QtChart模块依赖的库文件之一导致的。解决此问题的方法可能因操作系统和Python环境而异,但下面是一些常见的解决方法:检查是否已安装QtChart模块和其依赖项。您可以使用pip命令在终端中安装QtChart模块:Copycodepipinstal......
  • 动态库dll编写经验
    流程(1)新建dll工程,空白工程即可(2)编写接口代码(3)添加def文件,用这个最省事def文件说明:LIBRARYgeos-functionEXPORTSisPointInPolygon_GFC#调用c++编写的动态库注意入口函数的大小写,用WinDbg工具查看[DllImport("geos-function.dll",EntryPoint="isPoint......