构建成功,但是没有创建.lib 文件

我继承了大量的代码,包括一个视觉工作室项目,该项目应该(尽我所能)构建一个。Lib 文件。Visual Studio 说“ ... ... 生成代码... ... 创建库... ... 创建浏览信息文件... ...”,最后,它说构建成功了。在 release/debug 文件夹中,它有一大堆。Obj 文件,但它没有一个。Lib 文件。我会错过什么?

谢谢!

80652 次浏览

打开“项目属性”(在“解决方案资源管理器”中右键单击该项目,选择“属性”)。在“ Librarian”下面,选择“ Output File”-这是输出应该去的地方。

如果正确,请在项目的合适子目录中尝试 dir /s *.lib,以查看是否可以按日期和时间找到输出库。如果仍然找不到,请尝试进行干净重建(右键单击 project,选择“ Rebuild”)。

对于 DLL,一个。如果 DLL 没有导出任何用于外部使用的文件,则不会创建 Lib 文件。我不认为这适用于静态库构建,但我会确保您正在从库项目源代码中导出某些公共内容。

我的静态库只包含两个模板类,所以我没有一个。Cpp 文件。这导致 VisualStudio2015不输出。Lib 文件。为了解决这个问题,我创建了一个包含所有头文件的 huh.cpp 文件。

我也碰到了这个问题。

这是由于在输出目录定义中使用了无效的宏 enter image description here

本该如此

enter image description here

我不得不在第二个屏幕截图中空出完整的路径。我的宏不正确。当我应该使用 MsBuildProjectDirectory的时候,我却在使用 MsBuildProjectDir。当输出目录有效时,只读文本框将显示完整路径(例如: C:\Development\blah\blah\blah\)。如果输出目录无效,您将看到类似于第一个屏幕截图的内容。

如果没有为方法添加前缀 _ _ decspec (dllexport) ,则不会生成. lib。

我也遇到了同样的问题,尽管我已经在使用 __declspec(dllexport)函数了。

您的 ProjectName.cpp文件需要 #include "ProjectName.h"。如果不包含头文件,那么函数就不会被导出。DLL 构建良好,没有错误或警告(至少在 VS201715.8中是这样) ,但是没有 LIB 文件。

包括头和繁荣-LIB 文件生成。我知道这是个新手的错误,但是每个人都得从某些地方开始学习。

如果要导出的方法位于类中,则必须在类上使用 __declspec(dllexport)。否则不行。Lib 将被创建。

在 DLL 项目中,放置在. h 和. cpp 文件中定义的方法的 __declspec(dllexport)开头。

毕竟,再次编译 dll,这样就可以生成.lib 文件并准备好进行链接。

put Class Foo
{
public:
__declspec(dllexport) int GetFoo() const;

我从 dll 导出了一个类,但是在。H 档案。那个。Cpp 文件是空的。这个设置导致了。不生成 lib 文件。

我将函数的实现移到了.cpp 文件中,现在生成了 lib 文件。

这是 VS2019。

VS2019也有同样的问题。在我的例子中,我已经构建了几次没有定义任何符号的代码(例如,cpp 文件是空的)。

在将符号定义添加到 cpp 文件中之后,我开始注意到这个问题(没有生成 lib 文件)。

一个简单的清洁通过’重建所有’修复它。也许,如果您在没有定义任何符号的情况下构建,某些东西会被缓存到某个具有空产品 DLL 的地方,您需要清理解决方案以重置缓存状态。

我的问题是,在 Properties>C/C++>CommandLine项目中,我错误地指定了开关。 那就是我写的是 /D_Hashing_BUILD_DLL而不是 /D_HASHING_BUILD_DLL

边注:
这就是我如何在 Visual Studio 中构建我的 DLL/Lib文件: (我的 Hashing.h看起来像这样:)

#ifndef HASHING_H
#define HASHING_H


/* If we are we on Windows, we want a single define for it.*/
#if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__))
#define _WIN32
#endif /* _WIN32 */


#if defined(_WIN32) && defined(_HASHING_BUILD_DLL)
/* We are building Hashing as a Win32 DLL */
#define HASHING_API __declspec(dllexport)
#elif defined(_WIN32) && defined(HASHING_DLL)
/* We are calling Hashing as a Win32 DLL */
#define HASHING_API __declspec(dllimport)
#elif defined(__GNUC__) && defined(_HASHING_BUILD_DLL)
/* We are building Hashing as a shared / dynamic library */
#define HASHING_API __attribute__((visibility("default")))
#else
/* We are building or calling HASHING as a static library */
#define HASHING_API
#endif


//your inlcudes


class HASHING_API MyClass
{
//...
};


#endif // !HASHING_H

在前面提到的路径中,我只需要使用这里定义的开关就可以了,DLL 构建得很好!

在我的例子(Visual Studio 2019)中,当 # include“ pch.h”不是 cpp 中的第一个 include 语句时,就没有创建 lib 文件。

我对 C + + 不是很熟悉,我也有同样的问题。我觉得我应该分享一下对我有用的东西。根据下面的页面,似乎导入/导出必须在 class 语句之后。 Https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4091?view=msvc-160

// Warning C4091
// No error but didn't produce a .lib file
__declspec(dllimport) class X {};


// __declspec attribute after the class or struct keyword
// applies to user defined type worked
class __declspec(dllimport) X3 {};

有时当你在一个新的项目中打破你的头为什么。Lib 不是创建的-它可能是一些“过去的游戏”问题。 我在创造一个新的。但是在我决定使用 _ _ decspec (dllexport)/_ _ decspec (dllimport)的定义之前,我尝试过使用。绝对的 在删除.def 文件之后,它可能在项目文件中留下了一些错误的配置,并且它没有创建.lib 文件..。 直到我决定完全移除这个项目并重新创建——哇,完美的工作!