现在说我仍然使用dyn2.dll,dyn2.h和dyn2.lib构建我的项目作为静态库(比如sta1.lib)。是dyn2.lib中包含的所有代码,dyn2.dll包含在sta1.lib中。
意思是sta.lib独立。我不需要指向sta1.lib的路径变量中的dyn2.dll目录吗?我是新手,所以澄清答案会非常有帮助
感谢
答案 0 :(得分:3)
简单的答案是否。来自dyn2.dll的代码不包含在静态dyn1.lib(sta1.lib)中。实际上,您必须将dyn2.lib链接到现在使用静态sta1.lib的任何项目,否则您将遇到未解析的链接器错误。
这并不是说你的静态库不是dyn2.dll中的引用代码;它是。但作为静态库,没有PE模块。它只是带有外部引用的.obj代码模块的集合。那些外部引用(对dyn2.dll)仍然需要解析,因为任何人都使用静态库中的代码,而静态库中的代码使用代码引用到dyn2.dll。静态库没有“链接时”解析。只有在链接最终的PE(无论是DLL还是EXE)时才会发生这种情况。在最后的链接上仍然需要解决问题。
因此,回答你的第二个问题。在 情况(静态或动态)中,您的最终可执行文件仍然需要对dyn2.dll进行加载访问,无论它在哪里。此外,它现在还必须与dyn2.dll导入库(dyn2.lib)链接,就像你的dyn1.dll必须先前一样。