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

时间:2009-02-24 23:04:47

标签: c++ visual-studio dll import

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

所以我去了Visual Studio C ++ 2008 Express Edition,创建了一个类库类型的新项目,并将“配置类型”设置为“Dyanamic Library(.dll)”。

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

我相信可以同时构建LIB和DLL文件,因为on the MSDN it says "The linker creates the import library when the DLL is built."此外,another user of this website is creating LIB and DLL files at the same time using Visual C++

那我该怎么做呢?

4 个答案:

答案 0 :(得分:74)

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

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

Configuration Properties/Linker/Advanced/Import Library

我认为它在Express中是相同的(如果它甚至提供了配置名称的能力)。

答案 1 :(得分:28)

好的,所以我发现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向导上的“导出符号”框或对计算机程序员的lobotomies投票“是”来阻止此问题。

答案 2 :(得分:21)

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

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

如果你想要去那条路线,你也可以从那些库选择中制作一个MFC DLL或ATL DLL,但听起来你没有。

答案 3 :(得分:8)

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

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