首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态包含dll文件

静态包含dll文件
EN

Stack Overflow用户
提问于 2011-01-13 21:20:10
回答 3查看 1.9K关注 0票数 2

我在将dll文件静态链接到项目时遇到了问题。我使用的是Builder C++ 6。

代码语言:javascript
复制
I've unchecked:
Project \ Options \ Packages -> Build with runtime packages
Project \ Options \ Linker -> Use dynamic RTL
Project \ Options \ CodeGuard -> CodeGuard Validation

I've also added dll files using Project Manager:
myProject \ Add -> myFile.dll

当然,在所有更改之后,我已经重新构建了项目,但它在运行时仍然需要一些dll文件。我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-15 06:15:18

当您静态链接到DLL时,实际发生的情况是编译器检测代码正在调用的DLL函数,并设置存根指针,然后链接器将这些指针插入到应用程序的导入表中。在运行时,当您的应用程序运行时,OS加载器将首先通过将引用的DLL加载到内存中,然后根据需要更新函数指针来修补导入表(以及其他表)。这发生在应用程序内部的任何代码开始运行之前。如果加载程序无法解析引用,它将显示错误并终止进程。DLL本身不会编译到应用程序本身中。它必须保留为外部文件(以便在需要时可以与多个应用程序/进程共享),并安装在操作系统加载程序可以找到它的地方。这就是DLL的使用方式。任何项目选项的改变都不会改变这一点。

如果希望将库代码直接编译到应用程序中,则需要创建静态库而不是DLL。

票数 2
EN

Stack Overflow用户

发布于 2011-01-13 21:22:51

您不能像这样链接到DLL。您需要首先创建一个.LIB,然后链接到该You。

如果你无法创建.LIB,那么你可以使用.DEF。请阅读this或谷歌。

(顺便说一句: Builder C++具有与MSDN相同或命名类似的工具)

票数 6
EN

Stack Overflow用户

发布于 2011-01-13 21:59:11

与添加自己的dll不同,请参见here如何创建自己的静态库,您可以将其添加到项目中。如果只有dll,就不可能生成静态库。您只能从dll生成导入库,为此,您还需要分发dll。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4680486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档