我用VC ++生成了一个* .dll。当我想使用它时,需要* .lib。但我找不到它。如何获得* .lib?感谢。
答案 0 :(得分:10)
除非您另行指定,否则.lib
将在与.DLL
相同的目录中生成。
如果你得到一个dll而不是lib,那么很可能以某种方式或其他方式从dll中实际导出任何内容。在这种情况下,链接器将创建dll,但不会自动创建匹配的导入库。
答案 1 :(得分:2)
这实际上取决于您的项目设置。
看看* .vcprojx
并搜索类似的模式:
<link>
<ImportLibrary>.\Release/yourlibrary.lib</ImportLibrary>
</link>
答案 2 :(得分:1)
通常,Visual Studio会将.lib放在.dll文件旁边。 你的情况听起来根本就不会产生.lib。在将库构建为dll时,如果要在另一个项目中链接到该库(而不是使用dllopen等),则必须指定应将哪些函数导出到lib。为此,您必须在构建库时使用__declspec(dllexport)预先添加要导出的所有类或函数,并在链接时添加__declspec(dllimport)。
你经常会发现像这样的宏:
#ifdef WIN32
#ifdef MYLIB_EXPORTS
#define MYLIBAPI __declspec(dllexport)
#else
#define MYLIBAPI __declspec(dllimport)
#endif
#else
#define MYLIBAPI
#endif
然后,在构建lib时,您定义MYLIB_EXPORTS预处理器,以便它导出,同时链接它的导入。您自己的代码可能看起来像这样
class MYLIBAPI MyClass
{
public:
void SomeFunction()
}
MYLIBAPI void SomeGlobalFunction();
现在,构建时会导出MyClass和SomeGLobalFunction,并发生在lib文件中。