我在将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文件。我遗漏了什么?
发布于 2011-01-15 06:15:18
当您静态链接到DLL时,实际发生的情况是编译器检测代码正在调用的DLL函数,并设置存根指针,然后链接器将这些指针插入到应用程序的导入表中。在运行时,当您的应用程序运行时,OS加载器将首先通过将引用的DLL加载到内存中,然后根据需要更新函数指针来修补导入表(以及其他表)。这发生在应用程序内部的任何代码开始运行之前。如果加载程序无法解析引用,它将显示错误并终止进程。DLL本身不会编译到应用程序本身中。它必须保留为外部文件(以便在需要时可以与多个应用程序/进程共享),并安装在操作系统加载程序可以找到它的地方。这就是DLL的使用方式。任何项目选项的改变都不会改变这一点。
如果希望将库代码直接编译到应用程序中,则需要创建静态库而不是DLL。
发布于 2011-01-13 21:22:51
您不能像这样链接到DLL。您需要首先创建一个.LIB,然后链接到该You。
如果你无法创建.LIB,那么你可以使用.DEF。请阅读this或谷歌。
(顺便说一句: Builder C++具有与MSDN相同或命名类似的工具)
发布于 2011-01-13 21:59:11
与添加自己的dll不同,请参见here如何创建自己的静态库,您可以将其添加到项目中。如果只有dll,就不可能生成静态库。您只能从dll生成导入库,为此,您还需要分发dll。
https://stackoverflow.com/questions/4680486
复制相似问题