首页 > 其他分享 >关于MNN工程框架编译出来的静态库和动态库的使用

关于MNN工程框架编译出来的静态库和动态库的使用

时间:2024-08-19 13:37:32浏览次数:9  
标签:ConsoleApplication1 lib 静态 编译 文件夹 MNN 时库

一、MNN.lib文件路径

如果你看过之前的博客内容,应该可以在编译的的工程当中

C:\Users\Administrator\Desktop\MNN\MNN-master\MNN-CPU-OPENCL\lib\x64\lib\x64

该路径下面找到debug和release两个文件夹。
进入到release文件夹下面有Dynamic和Static两个文件夹,分别代表编译出来的静态库和动态库内容。这里先讲述静态库的使用。
进入Static文件夹,下面有MD和MT两个子文件夹,分别的含义:

  • MT (Multi-Threaded)
    静态运行时库:MT 表示多线程静态运行时库。这种配置会将 C++ 运行时库(如 libcmt.lib)静态链接到你的可执行文件中。这意味着所有的运行时库代码都被包含在生成的可执行文件或静态库(.lib 文件)中,生成的文件会比较大,但在不同的应用程序或库之间不会共享运行时库。这个方式不依赖于外部的 DLL 文件。

  • MD (Multi-Threaded DLL)
    动态运行时库:MD 表示多线程动态运行时库(DLL)。这种配置会将 C++ 运行时库的动态链接库(如 msvcrt.lib)链接到你的程序中。生成的可执行文件会依赖外部的运行时库 DLL 文件,如 MSVCR120.dll。相较于静态链接,动态链接的优势是多个应用程序可以共享同一个 DLL 文件,因此减少了总的内存占用,但这也意味着你必须确保系统中存在正确的运行时库版本。

二、静态库的使用

这里选择MT,将其中编译得到的.lib文件复制出来,移动到新的工程目录下面.最终工程目录如下:

点击查看代码
D:.
├─ConsoleApplication1
│ ├─ConsoleA.e1228ae8
│ │ └─x64
│ │ └─Debug
│ │ └─ConsoleA.e1228ae8.tlog
│ └─x64
│ └─Debug
├─include
│ ├─cv
│ │ └─imgproc
│ ├─MNN
│ │ ├─expr
│ │ └─plugin
│ └─stb
│ ├─.github
│ │ ├─ISSUE_TEMPLATE
│ │ └─workflows
│ ├─data
│ │ └─herringbone
│ ├─deprecated
│ ├─docs
│ ├─stb_image_resize_test
│ ├─tests
│ │ ├─caveview
│ │ │ └─win32
│ │ ├─oversample
│ │ ├─pbm
│ │ ├─pg_test
│ │ ├─pngsuite
│ │ │ ├─16bit
│ │ │ ├─corrupt
│ │ │ ├─iphone
│ │ │ ├─primary
│ │ │ ├─primary_check
│ │ │ └─unused
│ │ ├─prerelease
│ │ ├─sdf
│ │ └─vorbseek
│ └─tools
│ └─unicode
└─lib
这里可以看到我将需要的头文件包含到了include文件夹下面,将静态库包含到了lib文件夹下面,此时打开visual studio工程当中的powershell文件夹,执行指令
cl /I"D:\System-default\DeskTop\ConsoleApplication1\include" ConsoleApplication1.cpp /link /LIBPATH:"D:\System-default\DeskTop\ConsoleApplication1\lib" MNN.lib

命令解释

cl 是 Visual Studio 的 C/C++ 编译器。
/I"D:\System-default\DeskTop\ConsoleApplication1\include" 指定了包含路径,也就是你的头文件所在的目录。
ConsoleApplication1.cpp 是你的源文件。
/link 指定链接选项,后面跟随 /LIBPATH:"D:\System-default\DeskTop\ConsoleApplication1\lib",指定库文件的路径。
MNN.lib 是你要链接的静态库文件。

注意!!!!
这里的编译工具链需要指定使用visual studio的工具链,而不能使用MinGW的工具链,因为lib文件是使用visual studio工具编译出来的

Visual Studio 生成的 .lib 文件是 COFF 格式(Common Object File Format),专门用于 Windows 平台,并且它们的链接方式依赖于 Microsoft 的链接器。
MinGW 使用的 .a 文件(或 .lib 文件,如果是静态库)则是基于 GNU 工具链,格式和 Visual Studio 不同,不能直接互换使用。

这样就可以不需要MNN框架而通过利用MNN编译的静态库

三、动态库的使用

标签:ConsoleApplication1,lib,静态,编译,文件夹,MNN,时库
From: https://www.cnblogs.com/Vsonic12138/p/18367148

相关文章

  • Linux下的库(静态与动态)原理与制作
    程序的编译过程程序的编译过程是将源代码转换为可执行文件的一系列步骤。这个过程通常包括预处理、编译、汇编和链接等阶段 1.预处理(Preprocessing)预处理器(cpp)处理源代码文件中的预处理指令,如#include和#define。它展开宏定义,包含头文件,并删除注释。输出是经过预处理的......
  • visual studio当中动态库和静态库的联系
    一、为什么要写这篇博客公司需要调用MNN框架编译之后的动态库和静态库文件来在另外一台没有编译过MNN框架上的机器运行对应的程序,比如说人体关键点检测之类的程序,这个时候了解静态库和动态库的关系就很有必要了。二、现代编译器编译流程源代码(sourcecode)→预处理器(preprocess......
  • C语言编程-GCC编译过程
    gcc编译预处理->编译->汇编->链接预处理gcc-Ehelloworld.c-ohelloworld.i头文件展开;不检查语法错误,即可以展开任意文件;宏定义替换;将宏名替换为宏值;替换注释;将注释替换为空行;展开条件编译;根据条件来展开指令;编译gcc-Shelloworld.i-ohelloworld.s逐行检查......
  • 浏览器解析html文件src静态资源路径问题
    相对路径src资源引号内部不以/分割符开头,浏览器从当html文件前路径拼接url:场景a<imgsrc="static/1.jpeg"width="258"height="39"/>当前请求地址xxxx:80/html/1.html浏览器解析图片地址为xxxx:80/html/static/1.jpeg场景b<imgsrc="../static/1.jpeg"width="......
  • 值类型和引用类型、装箱和拆箱、静态类和普通类、方法的重载、继承和多态、访问修饰符
    目录一、值类型和引用类型的区别?值类型(ValueTypes)定义:特点:示例:引用类型(ReferenceTypes)定义:特点:示例:举例说明:总结:二、装箱和拆箱装箱(Boxing)特点:示例:拆箱(Unboxing)特点:示例:示例代码:装箱和拆箱的影响最佳实践:三、静态类和普通类的区别?静态类(Static......
  • Ubuntu 中GCC交叉编译工具链安装
    ​Ubuntu自带的gcc编译器是针对X86架构的,如果要编译的是ARM架构的代码,就需要一个在X86架构的PC上运行,可以编译ARM架构代码的GCC编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:1、它肯定是一个GCC编译器。2、这个GCC编译器是运行在X86架......
  • 【Android驱动12】Modem编译和sim卡配置检测过程
    一,Modem编译1.1查看ReleseNote发现需要查看"Build_Configure_Modem_MOLY"这张表,解压MT67xx_(xxx)_MOLY.LR9.W1444.MD.LWTG.MP.Vx.tar.gz到某文件,并在make目录下查看支持的配置信息1.2执行的命令,开始编译modem,则是./make.sh"SM67xx(Lxx_xxx).mak"new1.3执行perl......
  • MNN框架在Win10上的部署,支持OpenGL和Vulkan
    上篇记录了之前在win10上部署的流程,不过在camke的时候没有选择支持OpenGL和Vulkan。这里重新按照官方的语雀文档重新进行支持OpenGL和Vulkan的编译,简单做个记录。如果有其他的问题见上一篇博客。参见官方文档:推理框架Windows编译执行代码如下:cd/path/to/MNNpowershell#运行......
  • 手把手教你利用算法工具链训练、量化、编译、可视化征程 6 参考算法 BEVFormer
    写在前面:关于OE包内参考算法的使用,地平线已经释放了大量文档指导用户完成各类模型的训练、校准、量化、定点过程,但其中有些细节可能会对不是特别熟悉算法工具链的客户造成困扰,本文档致力于消除参考算法使用过程中所有可能存在的模糊操作,引导初学者快速上手参考算法,在实操中树立......
  • HCL学习——直连路由和静态路由
     vlan的目的是隔离广播域,能不能互访不是关注的事。vlan是二层技术,上了三层就不管用了。要两个vlan在网络层实现互通,要通过路由器。 两个vlan能通。 如果有20个vlan,就连20个接口,上述解法不好,有个技术叫单臂路由。单臂路由现在也不用了,但是原理要掌握。两个vlan要走同一......