c语言链接动态库dll

!!!!!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惹!!!!

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

阿西吧,我胡汉三又回来了!!!

 昨天重新装了win10,把软件下回来的时候,链接动态库发现有报错了,好在very easy~~

 找不到dll,那就给他dll,最简单的方法就是在运行路径下直接把dll复制进去

众所周知,动态库在编译的时候存放的是函数入口地址,并不是整个代码,而dll文件捏,就是用来存放函数入口地址的。dll和lib文件必须随应用程序一起发行,否则应用程序会产生错误。

Windows在查找dll时,会按照如下路径来查找

1. 包含EXE文件的目录,

2. 进程的当前工作目录,

3. Windows系统目录,

4. Windows目录,

5. 列在Path环境变量中的一系列目录。

找不到的意思当然是你的dll问价并不在上述所说的路径中,而我也记得配置环境时,最后一步生成后事件里写了dll的地址。

 解决方法上面提过了,这篇终于over了。。。

Salute-----------------

原文地址:https://www.cnblogs.com/0211ji/p/15756294.html