所以,我有一个包含3个项目(2个DLL和1个.exe)的c ++解决方案。
这是基本依赖关系表示:
申请 - > DLL2
申请 - > DLL1
DLL2 - > DLL1
我遇到的问题是DLL2(构建它时)确实生成了.dll但是没有生成.lib和.exp我需要在Application项目中正确引用DLL2。但是,DLL1确实生成了这些文件,并且我已经将DLL1的设置与DLL2进行了比较,我找不到可能存在的差异。
答案 0 :(得分:9)
对此的简单解释是您忘记导出任何内容。如果没有导出,链接器将不会创建.lib / .exp文件。您可以通过在DLL上运行dumpbin.exe /exports
来验证这一点。希望你什么也看不见。
使用__declspec(dllexport)
从DLL导出符号。或.def文件。
答案 1 :(得分:4)
问题是DLL2只有.h文件,并且没有任何关联的.cpp文件中的内容。因此IDE没有看到创建.lib文件的必要性。
答案 2 :(得分:0)
我刚刚发现了另一种导致同样事情发生的方法。我将我开发并测试的一些例程作为另一个DLL中的服务例程移动到他们自己的DLL中。由于此举是在我编写第一行代码之前计划的,因此它们没有标记为导出,因此使用该项目的默认调用约定__cdecl。当我构建库时,构建环境没有创建.LIB文件。经过一些调查,并在本主题中提到__declspec(dllimport)的启发后,我意识到,虽然我将声明移动到New Project Wizard生成的模板头文件中,但我忘了插入生成的调用约定的名称宏进入原型。
指定了调用约定,在头文件和包含实现的CPP文件中,我得到了预期的.LIB文件。