是否可以像DLL一样动态链接lib?

时间:2011-02-04 10:49:53

标签: c++ static-libraries

这是面试问题。

是否可以像DLL一样动态链接lib?

例如,对于DLL,我们使用LoadLibrary并调用导出的函数。 是否可以以相同的方式使用lib文件?

4 个答案:

答案 0 :(得分:5)

没有。 .lib库已静态链接, 目的解析 的名称符号> {+ 3}}之后的链接时间,而Linker link-time之前发生。他们经常称为“静态库”(这就是为什么我在你的问题中添加了这个标签!)。这是lib的简短故事。

但是,如果您真的想在运行时链接,可以创建DLL包装器。

答案 1 :(得分:2)

没有。改为创建一个DLL,如果没有源代码,请使用自己的DLL接口封装.lib中的功能。

答案 2 :(得分:1)

没有。这是不可能的。 DLL是具有PE32头的模块,其具有将其加载到进程中的所有信息。 LIB只是OBJ文件的存档。

尽管其他人说围绕它包装DLL很容易,但这可能非常困难。原因是,.LIB不仅可以解析某些依赖关系,还可以解析未解析的外部问题。

只要这些未解析的外部只需要编译器的运行时库包装在DLL中就可以了。您可以在创建DLL项目时检查此项,可能使用最小的C ++源,并尝试编译。如果你能看到更多的外部因素必须与其他图书馆一起解决。

内存管理可能会出现一个重要问题。当您与.LIB静态链接时,您将使用所有相同的定义。如果你的库带有自己的实现,比如malloc-stlye函数,只要你将所有这些符号添加到EXPORT列表中,它就不会链接到你的应用程序。查找应包含在EXPORT表中的公共符号列表可能会很麻烦。

答案 3 :(得分:0)

- 不是直接的,但工作量非常小。

创建一个新的.DLL项目,链接.lib,定义要在.DEF文件中导出的函数然后编译。