我继承了大量的代码,包括一个视觉工作室项目,应该(尽我所知)构建一个.lib文件。 Visual Studio说“......生成代码......创建库......创建浏览信息文件......”,最后,它说构建成功了。在release / debug文件夹中,它有一堆.obj文件,但它没有.lib文件。我能错过什么?
谢谢!
答案 0 :(得分:60)
打开“项目属性”(在“解决方案资源管理器”中右键单击项目,选择“属性”)。在“Librarian”下,选中“输出文件” - 这是输出的位置。
如果看起来正确,请在项目的合适子目录中尝试dir /s *.lib
,看看是否可以按日期和时间找到输出库。如果仍然找不到它,请尝试清理重建(右键单击项目,选择“重建”)。
对于DLL,如果DLL不为外部使用导出任何内容,则不会创建.Lib文件。我不认为这适用于静态lib构建,但我会确保您从库项目源代码中导出一些公共内容。
答案 1 :(得分:13)
答案 2 :(得分:2)
我也遇到了这个问题。
应该是什么时候
我不得不在第二个屏幕截图中删除完整路径。我有一个不正确的宏。当我应该使用MsBuildProjectDir
时,我正在使用MsBuildProjectDirectory
。当输出目录有效时,只读文本框将显示完整路径(例如:C:\Development\blah\blah\blah\
)。如果输出目录无效,您将获得类似第一个屏幕截图的内容。
答案 3 :(得分:2)
即使我已经在使用__declspec(dllexport)
函数,我也遇到了同样的问题。
您的ProjectName.cpp
文件需要#include "ProjectName.h"
。如果不包括头文件,则不会导出函数。 DLL生成良好,没有错误或警告(至少在VS2017 15.8中),但是您没有得到LIB文件。
包括头文件和动臂-生成LIB文件。我确定是菜鸟犯错,但是每个人都必须在某个地方开始学习。
答案 4 :(得分:2)
如果要导出的方法在类中,则必须在该类上__declspec(dllexport)
。否则将不会创建.lib。
答案 5 :(得分:1)
我正在从dll中导出类,但已在.h文件中内联声明了该类。 .cpp文件在那里,但是为空。此设置导致未生成.lib文件。
我将功能的实现移到了.cpp文件,现在生成了lib文件。
这是VS2019中的版本。
答案 6 :(得分:0)
在DLL项目中,将{.1和.cpp文件中定义的方法的__declspec
(dllexport)开头。
毕竟,再次编译您的dll,以便生成.lib文件并准备进行链接。
put Class Foo
{
public:
__declspec(dllexport) int GetFoo() const;
答案 7 :(得分:0)
VS2019在这里存在相同的问题。就我而言,我已经构建了几次,但都没有定义符号(即cpp文件为空)。
在将符号定义添加到cpp文件之后,我开始注意到此问题(没有生成任何lib文件)。
通过“全部重建”的简单清理方法将其修复。也许如果您在未定义符号的情况下进行构建,则某些内容将被缓存到您具有空产品DLL的某个位置,并且您需要清理解决方案以重置该缓存状态。
答案 8 :(得分:0)
我的问题是在项目Properties>C/C++>CommandLine
中,我指定了错误的开关。
那不是写我写过/D_HASHING_BUILD_DLL
的{{1}}。
旁注:
这就是我在Visual Studio中构建/D_Hashing_BUILD_DLL
/ DLL
文件的方式:(我的Lib
看起来像这样:)
Hashing.h
在我前面提到的路径中,我只使用这里定义的开关,然后就可以运行DLL了!