| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1995 人关注过本帖
标题:Windows 编程小白请教一下编译链接 dll 的问题
只看楼主 加入收藏
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
结帖率:96%
收藏
已结贴  问题点数:20 回复次数:6 
Windows 编程小白请教一下编译链接 dll 的问题
为方便描述,就假设要用的库叫 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编辑过]

搜索更多相关主题的帖子: 编译 main dll 链接 Windows 
2021-05-10 10:45
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
之前没给代码细节,因为我感觉可能不是源码上的问题。

main.c 大致是:

程序代码:
#include "L.h"

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

    return 0;
}


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

2021-05-10 10:50
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
忘了改问题分了,已经发表的帖子还能修改么?
2021-05-10 11:03
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
dll隐式调用虽编译链接时要.lib,但执行时也需要.dll
2021-05-11 10:06
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 4楼 吹水佬
是我以为 .dll 在系统目录下能找到就行,现在是必须和代码在一个文件夹下。
这很不方便,比如把编译好的可执行文件拷贝到其它地方时就不能用了,即使当前的电脑有 .dll 的。

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

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

2021-05-11 22:22
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:20 
系统路径的定义在:
系统属性--高级系统设置--环境变量,编辑Path
dll放在当前目录可以调用,如果放在系统定义的路径不能调用,可能是lib的问题。
dll隐式调用就是静态调用,通过使用导出库lib在编译时引用dll函数。
有一点不要搞错:lib有两种:
一种是导出库lib,只有函数名导出表,不含函数体,使用时需要dll。
另一种是静态库lib,可以看成是一个函数包,与dll无关。



2021-05-12 09:49
ybbysf
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-11-6
收藏
得分:0 
回复 6楼 吹水佬
可以加个联系方式吗?有个dll问题请教下~
2022-12-08 21:31
快速回复:Windows 编程小白请教一下编译链接 dll 的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020724 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved