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

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

所以我去了Visual Studio C ++ 2008速成版,创build了一个types为Class Library的New Project,并将“Configuration Type”设置为“Dyanamic Library(.dll)”。

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

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

那我该怎么做呢?

通过select“类库”,您意外地告诉它使用C ++的CLI(托pipe)扩展来创build.Net库。

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

如果你想要走这条路线,你也可以从这些库select中创build一个MFC DLL或ATL DLL,但是听起来好像你不这样做。

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

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

Configuration Properties/Linker/Advanced/Import Library 

我认为它在Express中是一样的(如果它甚至提供configuration名称的能力)。

好,所以我从http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/find答案,说这个问题是由于没有导出任何符号,并进一步指示如何导出符号来创buildlib文件。; 为此,请将以下代码添加到您的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向导上的“导出符号”框,或通过为计算机程序员进行拼写投票,可以防止此问题。

你也应该在项目设置里指定def名字:

configuration>属性/input/高级/模块>定义文件