我想要一个单独的 Visual Studio 项目来构建 DLL 文件和导入库 (.lib) 文件。 (导入库是一个静态链接库,负责在使用它的其他项目中加载该 DLL 文件)。
因此,我进入 Visual Studio C++ 2008 Express Edition,创建了一个类型为 Class Library 的新项目,并将“配置类型”设置为“动态库(.dll)”。
但是当我构建解决方案时,我看到的唯一相关输出文件是 DLL 文件;我没有看到任何 LIB 文件生成。 我查看了项目目录和所有子目录(发布和调试)。
我相信可以同时构建一个LIB和一个DLL文件,因为在MSDN上它说“链接器在构建DLL时创建导入库。”此外,该网站的另一个用户是使用 Visual C++ 同时创建 LIB 和 DLL 文件。
那么我该怎么做呢?
您的 DLL 项目有任何实际的导出吗? 如果没有导出,链接器将不会生成导入库 .lib 文件。
在 VS 的非 Express 版本中,导入库名称在项目设置中指定:
Configuration Properties/Linker/Advanced/Import Library
我认为 Express 中也是一样的(如果它甚至提供配置名称的功能)。
好的,所以我从http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/找到了答案说该问题是由于未导出任何符号引起的,并进一步说明如何导出符号以创建 lib 文件。为此,请将以下代码添加到 DLL 的 .h 文件中。
#ifdef BARNABY_EXPORTS
#define BARNABY_API __declspec(dllexport)
#else
#define BARNABY_API __declspec(dllimport)
#endif
其中 BARNABY_EXPORTS 和 BARNABY_API 是您项目的唯一定义。然后,您导出的每个函数只需在其前面加上:
BARNABY_API int add(){
}
通过单击新项目 DLL 向导上的“导出符号”框或对计算机程序员的脑白质切除投赞成票,可以避免此问题。
通过选择“类库”,您不小心告诉它使用 C++ 的 CLI(托管)扩展创建 .Net 库。
相反,创建一个 Win32 项目,然后在下一页的“应用程序设置”中选择“DLL”。
如果您想走这条路,您还可以从这些库选择中创建 MFC DLL 或 ATL DLL,但听起来您不这样做。
您还应该在此处的项目设置中指定默认名称:
配置 > 属性/输入/高级/模块 > 定义文件
我有一个 Visual Studio 2022 的工作示例
vs2022的mainapp项目有一些配置步骤
如果dll项目不在同一个解决方案中,则需要进行更多配置!