!!!!!2022.1.1 元旦普天喜庆的日子,终于搞定了一个大难题~~~~
每天都在气老师的我,终于蒸汽惹。
说实话还很不好意思,2022年的第一天就旷了听报告(捂脸,太困了),老师打电话过来手机还是静音,一觉睡到11点半,存存的气死老师型哇(Sorry)
So,俺们今天奋发图强(苏大强奋发图强),干了一票大的!!
前几天刚被老师diss,大四要毕业了还不会链接动态库,丢人哇,我的妈~~
(虽然每天都和老师斗智斗勇,但是听到这话还是心碎惹,唔)
废话不说了,上重点~~~~
先说一下,静态库和动态库的区别(主要体现在编译上的区别)
静态库(Windows下后缀lib,Linux 和 Mac 下后缀a):编译时,静态库中的函数都会被复制到目标程序中,且不再改变,编译之后,库文件基本上没有用了,直接可以运行,目标程序没有外部依赖,但是全部的库文件内容的复制会导致目标程序体积增大。
动态库(后缀dll):编译时并不会被复制到目标程序中,目标程序只会有存储动态库的入口,等到程序运行时,动态库才会被加载到目标程序中。优点是我们可以随时对动态库进行修改而不需要重新编译。
需要注意的是!!!!!!
动态库是不能直接运行的,直接运行会报下面的错误,需要另建项目调用动态库的接口!!!!!
SoSoSo,我们去另见项目吧~~~~
提前注意(雷区):写代码有些不好的习惯!!! 原代码是c语言编译的,新建项目请也新建.c文件,不要新建.cpp文件,不要新建.cpp文件!!!!(捉急啊,这东西也花了我一些时间)
步骤开始惹~~
1、(本人用的vs2022)新建一个空项目或者控制台项目,不管是什么,建成之后,新建一个.c文件,注意是.c文件!!!
2、打开项目-----》属性-------》c/c++的常规中----》附加包含目录,这里填写动态库的头文件的路径!!这里就是Alg.h的路径,直接去源代码中搜索Alg.h定位就好惹
3、打开链接器------》常规------》附加库目录,填写Alg.lib路径,同款定位就好了嗷~~
4、链接器-----》输入-----》附加依赖项,填写Alg.lib(直接写!!!放心大胆的写!!!!!)
5、生成事件-----》生成后事件-----》命令行,填写xcopy/y/d "dll的地址/dll的名字",
俺这里格式就是xcopy /y /d “D:/C_CODE/Aigis-enc/参数集PARAMS II/3.Aigis-enc算法动态库源码/x64/Release/Alg.dll”
俺不知道为什么这些写哇,xcopy/y/d是啥意思(有人摸索到这一步知道麻烦指导一下我这个蒟蒻哇)
6、咱们即将大功告成哇,再加一句#pragma comment(lib, “Alg.lib”),格式如下,呜呜呜呜呜,此时运行调用动态库中的函数,终于出结果了。功夫不负大美女(呸),皇天不负努力的人,qiao。
over!!!!!小可爱们元旦快乐!!!!!
暗戳戳补一个小知识点(呜呜呜,我是笨蛋)
debug和release的区别(老师说运行的时候都用release不要用debug,才引起的爹梨之争)
简单说哇
debug通常称为调试版本,记得以前做数据结构巴拉巴拉巴拉的时候,我们都要求F11跟踪语句调试的哇,当时用的就是debug版本捏。
release通常称发布版本,他是进行了优化的,无论是代码大小和运行速度都是最优的,俗话说就是跑起来快~~~所以咱们代码没有错误的情况,直接release吧~~~·
真的over惹!!!!