2009-02-20 44 views
10

我添加了一个dll项目到我的解决方案中,并通过可执行项目明确地引用它。 可执行文件抱怨说它找不到lib。.lib文件没有被创建(VS2008)

任何想法如何设置项目来创建所需的lib文件? 并且为什么该项目不会创建一个?!?

干杯

注意 我已搜查该项目,并没有被任何地方创建的文件。

回答

12

在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文件,则需要在库项目的链接器属性中指定它。

1

您是否在Exe Project中的Project Properties-> Linker-> Input sheet中包含了lib文件。

并确保您在链接器选项卡中包含其他参考。

+0

我做了:( 但因为它没有被创建,这是一个静音点? – 2009-02-20 15:44:36

+0

编译器在构建lib文件时是否抛出任何错误? 检查lib的$(OutDir)\ $(ProjectName)位置 – Vinay 2009-02-20 16:04:27

+0

没有错误被抛出(除了那个抱怨lib文件不存在的错误)并且lib不存在项目中的任何位置。 – 2009-02-20 16:06:27

1

检查生成DLL的项目。如果它没有生成.lib,你可能没有告诉它。你可以在属性 - >常规 - >配置类型(选择静态库.lib)中将项目的输出从DLL更改为静态库。

4

我以前见过这个。最近又碰到了。如果没有导出任何内容,则不会创建.lib文件。导出函数有两种方式。

1)用__declspec(dllexport)标记函数。

OR

2)使用.DEF文件,该文件列出了所有那些要导出功能。

解决方案:

1)一般需要一个编译时间标志被设置为激活的预处理器块一些的#define设置为__declspec()。其他人在他们的帖子中列出。

2)需要设置行Properties-> Linker-> Input-> Module Definition File。