我在我的解决方案中添加了一个dll项目,并通过可执行项目显式引用它。 可执行文件抱怨它无法找到lib。
如何设置项目以创建所需的lib文件? 并且为什么项目不会创建一个?!?
干杯
注意 我搜索了项目,并且没有在任何地方创建文件。
答案 0 :(得分: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,但是当你的客户端代码是#include头文件时dllimport。如果Visual Studio生成了基本的项目结构,它可能已经创建了一个合适的#define来使用。
您不必创建.def文件并添加dllexport,只需添加一个或另一个。我更喜欢后者。此外,如果您选择使用.def文件,则需要在库项目的链接器属性中指定它。
答案 1 :(得分:4)
我之前见过这个。实际上最近刚刚再次命中。如果未导出任何内容,则不会创建.lib文件。导出函数有两种方式。
1)用__declspec(dllexport)标记一个函数。
OR
2)使用.def文件列出所有要导出的函数。
解决方案:
1)通常需要设置编译时标志来激活预处理程序块以将某些#define设置为__declspec()。其他人在他们的帖子中列出了这一点。
2)需要设置行Properties-> Linker-> Input->模块定义文件。
答案 2 :(得分:1)
您是否在项目属性中包含了lib文件 - > Linker->在Exe Project中输入表格。
并确保在链接器选项卡中包含其他引用。
答案 3 :(得分:1)
检查构建DLL的项目。如果它没有生成.lib,你可能还没有告诉它。您可以在属性 - >常规 - >配置类型中选择项目的输出从DLL更改为静态库(选择静态库.lib)