因此,我有一个包含3个项目(2dll和1个.exe)的c++解决方案。
下面是基本的依赖关系表示:
应用程序--> DLL2
应用程序--> DLL1
DLL2 --> DLL1
我遇到的问题是,DLL2 (在构建它时)确实会生成.dll,但不会生成我需要在应用程序项目中正确引用DLL2的.lib和.exp。然而,DLL1确实生成了这些文件,我已经比较了DLL1和DLL2的设置,但我找不到有什么不同。
发布于 2012-11-01 22:22:17
问题是DLL2只有.h文件,在任何相关的.cpp文件中都没有内容。所以集成开发环境并没有意识到创建.lib文件的必要性。
发布于 2012-11-01 21:59:05
对此的简单解释是,您只是忘记了导出任何内容。如果没有导出,链接器将不会创建.lib/.exp文件。您可以通过在DLL上运行dumpbin.exe /exports来验证这一点。带着你什么也看不见的期望。
使用__declspec(dllexport)从DLL中导出符号。或.def文件。
发布于 2015-03-15 05:23:54
我刚刚发现了另一种方法来导致同样的事情发生。我将一些在另一个DLL中作为服务例程开发和测试的例程移到了它们自己的DLL中。由于在我编写第一行代码之前就计划好了这一步,它们没有被标记为导出,因此使用了该项目的默认调用约定__cdecl。当我构建这个库时,构建环境并没有创建.LIB文件。经过一些调查,并受到本主题中提到的__declspec(dllimport)的启发,我意识到,尽管我将声明移动到了由新建项目向导生成的模板头文件中,但我忘记将生成的调用约定宏的名称插入到原型中。
通过在包含实现的头文件和CPP文件中指定调用约定,我得到了预期的.LIB文件。
https://stackoverflow.com/questions/13178448
复制相似问题