我想有一个Visual Studio项目,它构建一个DLL文件和一个导入库(.lib)文件.(导入库是一个静态链接库,负责在其他使用它的项目中加载该DLL文件).
所以我去了Visual Studio C++ 2008 Express Edition,创建了类库类型的新项目,并将"配置类型"设置为"Dyanamic Library(.dll)".
但是当我构建解决方案时,我看到的唯一相关输出文件是DLL文件; 我没有看到生成任何LIB文件.我查看了项目目录和所有子目录(Release和Debug).
我相信可以同时构建LIB和DLL文件,因为在MSDN上它说"链接器在构建DLL时创建导入库". 此外,该网站的另一个用户是使用Visual C++同时创建LIB和DLL文件.
那我该怎么办呢?
您的DLL项目是否有任何实际的导出?如果没有导出,链接器将不会生成导入库.lib文件.
在非Express版本的VS中,导入库名称在此处的项目设置中指定:
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投票是可以防止此问题.
通过选择"类库",您不小心告诉它使用C++的CLI(托管)扩展来创建.Net库.
而是创建一个Win32项目,并在下一页的"应用程序设置"中选择"DLL".
如果你想要去那条路线,你也可以从那些库中选择制作一个MFC DLL或ATL DLL,但听起来你没有.
您还应在此处的项目设置中指定def名称:
配置>属性/输入/高级/模块>定义文件