如何在 Visual C++ 中构建导入库 (.lib) 和 DLL?

问题描述 投票:0回答:5

我想要一个单独的 Visual Studio 项目来构建 DLL 文件和导入库 (.lib) 文件。 (导入库是一个静态链接库,负责在使用它的其他项目中加载该 DLL 文件)。

因此,我进入 Visual Studio C++ 2008 Express Edition,创建了一个类型为 Class Library 的新项目,并将“配置类型”设置为“动态库(.dll)”。

但是当我构建解决方案时,我看到的唯一相关输出文件是 DLL 文件;我没有看到任何 LIB 文件生成。 我查看了项目目录和所有子目录(发布和调试)。

我相信可以同时构建一个LIB和一个DLL文件,因为在MSDN上它说“链接器在构建DLL时创建导入库。”此外,该网站的另一个用户是使用 Visual C++ 同时创建 LIB 和 DLL 文件

那么我该怎么做呢?

c++ visual-studio dll import
5个回答
90
投票

您的 DLL 项目有任何实际的导出吗? 如果没有导出,链接器将不会生成导入库 .lib 文件。

在 VS 的非 Express 版本中,导入库名称在项目设置中指定:

Configuration Properties/Linker/Advanced/Import Library

我认为 Express 中也是一样的(如果它甚至提供配置名称的功能)。


42
投票

好的,所以我从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 向导上的“导出符号”框或对计算机程序员的脑白质切除投赞成票,可以避免此问题。


24
投票

通过选择“类库”,您不小心告诉它使用 C++ 的 CLI(托管)扩展创建 .Net 库。

相反,创建一个 Win32 项目,然后在下一页的“应用程序设置”中选择“DLL”。

如果您想走这条路,您还可以从这些库选择中创建 MFC DLL 或 ATL DLL,但听起来您不这样做。


9
投票

您还应该在此处的项目设置中指定默认名称:

配置 > 属性/输入/高级/模块 > 定义文件


0
投票

我有一个 Visual Studio 2022 的工作示例

源代码

vs2022的mainapp项目有一些配置步骤

  1. 配置属性 > C/C++ > 常规 > 附加包含目录(dll 项目中头文件的路径)
  2. 配置属性>链接器>输入(来自dll项目的.lib文件)

如果dll项目不在同一个解决方案中,则需要进行更多配置!

© www.soinside.com 2019 - 2024. All rights reserved.