静态包含dll文件

时间:2011-01-13 13:20:10

标签: c++ build c++builder

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

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文件。我省略了什么?

3 个答案:

答案 0 :(得分:6)

您无法链接到这样的DLL。您需要先创建一个.LIB,然后链接到它。

如果您无法创建.LIB,则可以使用.DEF。阅读this或Google。

(顺便说一下:Builder C ++与MSDN上的工具具有相同或相似名称的工具)

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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