如何在Visual C ++中构建导入库(.lib)和DLL?
我想拥有一个构建DLL文件和导入库(.lib)文件的Visual Studio项目。 (导入库是一个静态链接库,负责在使用它的其他项目中加载该DLL文件)。
所以我去了Visual Studio C ++ 2008 Express Edition,创建了一个类型为Class Library的新项目,并将“Configuration Type”设置为“Dyanamic Library(.dll)”。
但是当我构建解决方案时,我看到的唯一相关的输出文件是一个DLL文件; 我没有看到任何LIB文件正在生成。 我查看了项目目录和所有子目录(Release和Debug)。
我相信可以同时构建一个LIB和一个DLL文件,因为在MSDN上它说“链接器在DLL生成时创建了导入库”。 此外,本网站的另一位用户正在使用Visual C ++同时创建LIB和DLL文件。
那我该怎么做呢?
通过选择“类库”,您意外地告诉它使用C ++的CLI(托管)扩展来创建.Net库。
相反,创建一个Win32项目,并在下一页的应用程序设置中选择'DLL'。
如果你想走那条路线,你也可以从这些库选择中创建一个MFC DLL或ATL DLL,但听起来好像你没有。
你的DLL项目有没有实际的出口? 如果没有导出,链接器将不会生成导入库.lib文件。
在VS的非Express版本中,在此处的项目设置中已经指定了导入libray名称:
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向导上的“导出符号”框,或者通过为计算机程序员的lobotomies投票yes,可以防止此问题。
链接地址: http://www.djcxy.com/p/85425.html上一篇: How do I build an import library (.lib) AND a DLL in Visual C++?