我添加了一个dll项目到我的解决方案中,并通过可执行项目明确地引用它。 可执行文件抱怨说它找不到lib。.lib文件没有被创建(VS2008)
任何想法如何设置项目来创建所需的lib文件? 并且为什么该项目不会创建一个?!?
干杯
注意 我已搜查该项目,并没有被任何地方创建的文件。
我添加了一个dll项目到我的解决方案中,并通过可执行项目明确地引用它。 可执行文件抱怨说它找不到lib。.lib文件没有被创建(VS2008)
任何想法如何设置项目来创建所需的lib文件? 并且为什么该项目不会创建一个?!?
干杯
注意 我已搜查该项目,并没有被任何地方创建的文件。
在DLL项目的链接器 - >高级属性选项卡中,验证导入库(您正在查找的.lib文件)的值是否正确/合理。此属性的值将决定导入库的名称以及链接器将其写入的位置。
您可能还需要在项目中生成导入定义文件(.def),或者检查头文件并确保导出的函数在头文件中使用__declspec(dllexport)限定符进行标记。这通常是使用#define切换,如:
#ifdef MYAPI_EXPORTS
#define MYAPI_API __declspec(dllexport)
#else
#define MYAPI_API __declspec(dllimport)
#endif
void MYAPI_API foo(int bar);
基本上你希望编译器看到DLLEXPORT时,它正在建设的图书馆,但dllimport的时候你的客户端代码#包括头文件。如果Visual Studio生成了基本的项目结构,它可能已经创建了一个合适的#define来使用。
您不必同时创建.def文件并添加dllexport,只需一个或另一个。我更喜欢后者。另外,如果您选择使用.def文件,则需要在库项目的链接器属性中指定它。
您是否在Exe Project中的Project Properties-> Linker-> Input sheet中包含了lib文件。
并确保您在链接器选项卡中包含其他参考。
检查生成DLL的项目。如果它没有生成.lib,你可能没有告诉它。你可以在属性 - >常规 - >配置类型(选择静态库.lib)中将项目的输出从DLL更改为静态库。
我以前见过这个。最近又碰到了。如果没有导出任何内容,则不会创建.lib文件。导出函数有两种方式。
1)用__declspec(dllexport)标记函数。
OR
2)使用.DEF文件,该文件列出了所有那些要导出功能。
解决方案:
1)一般需要一个编译时间标志被设置为激活的预处理器块一些的#define设置为__declspec()。其他人在他们的帖子中列出。
2)需要设置行Properties-> Linker-> Input-> Module Definition File。
我做了:( 但因为它没有被创建,这是一个静音点? – 2009-02-20 15:44:36
编译器在构建lib文件时是否抛出任何错误? 检查lib的$(OutDir)\ $(ProjectName)位置 – Vinay 2009-02-20 16:04:27
没有错误被抛出(除了那个抱怨lib文件不存在的错误)并且lib不存在项目中的任何位置。 – 2009-02-20 16:06:27