注册 登录
编程论坛 C语言论坛

Windows 编程小白请教一下编译链接 dll 的问题

pangding 发布于 2021-05-10 10:45, 2311 次点击
为方便描述,就假设要用的库叫 L 吧。下载到的文件包含帮助及如下文件:
L.dll
L.lib
L.exp
L.h


我写了个 main.c, 然后用 gcc 编译:

$ gcc -o main main.c L.lib


编译得到的 main.exe 运行起来还挺正常。
但如果把 L.dll 移动到系统目录,比如, %systemroot%\System32\ 和 %systemroot%\SysWOW64\ 下程序就不能正常执行了。

现在希望编译出来的可执行文件在安装好 L.dll 的电脑都可以正常执行,应该如何编译呢?
或者简单来说这种带动态库的程序一般如何编译?

问题可能比较小白哈,以前没怎么在 win 下写过程序,还请大家不吝赐教。

打错几个字哈,改一改。

[此贴子已经被作者于2021-5-11 22:27编辑过]

6 回复
#2
pangding2021-05-10 10:50
之前没给代码细节,因为我感觉可能不是源码上的问题。

main.c 大致是:

程序代码:

#include "L.h"

int main(int argc, char *argv[])
{
    function_in_dll();

    return 0;
}


[此贴子已经被作者于2021-5-11 22:27编辑过]

#3
pangding2021-05-10 11:03
忘了改问题分了,已经发表的帖子还能修改么?
#4
吹水佬2021-05-11 10:06
dll隐式调用虽编译链接时要.lib,但执行时也需要.dll
#5
pangding2021-05-11 22:22
回复 4楼 吹水佬
是我以为 .dll 在系统目录下能找到就行,现在是必须和代码在一个文件夹下。
这很不方便,比如把编译好的可执行文件拷贝到其它地方时就不能用了,即使当前的电脑有 .dll 的。

我有几个小问题哈:
1. 比如 .dll 是拷贝到系统目录就行么?还是需要注册?
2. 如果您不用 gcc 也没关系,vc 编译的可执行文件是也得和 .dll 在同一个文件夹下么?还是可以单独拷贝到其它地方用?
3. 您说的隐式调用我也不太了解。是说改成显示调用就能达到我的目的了么?

[此贴子已经被作者于2021-5-11 22:23编辑过]

#6
吹水佬2021-05-12 09:49
系统路径的定义在:
系统属性--高级系统设置--环境变量,编辑Path
dll放在当前目录可以调用,如果放在系统定义的路径不能调用,可能是lib的问题。
dll隐式调用就是静态调用,通过使用导出库lib在编译时引用dll函数。
有一点不要搞错:lib有两种:
一种是导出库lib,只有函数名导出表,不含函数体,使用时需要dll。
另一种是静态库lib,可以看成是一个函数包,与dll无关。



#7
ybbysf2022-12-08 21:31
回复 6楼 吹水佬
可以加个联系方式吗?有个dll问题请教下~
1