【发布时间】:2011-02-16 17:25:49
【问题描述】:
作为学习 C++ 的一部分,我编写了一个简单的类库 + 引用它的应用程序。一切都会构建,除了类库不生成 .lib 文件,这会导致应用程序抛出“LINK:致命错误 LNK1104:无法打开文件”。这似乎很合理;显然,如果没有必要的文件,就会出现错误并且是致命的。 (旁注:我还没有书)
所以,我开始寻找可能无法生成 .lib 文件的原因。顺便说一句,我的搜索功能很弱。我所发现的是,如果库没有任何 __declspec(dllexport) 标记,它就不会导出 .lib。
我现在将发布类库的标题和 .cpp 内容(一个简单的“控制台”类,带有一个“Write(std::string)”方法)。
标题:
// Extensions.h
#pragma once
#include "stdafx.h"
namespace Extensions {
__declspec(dllexport) class Console
{
public:
__declspec(dllexport) static void Write(std::string text);
};
}
我不确定在标记类时是否需要标记函数,但我可以检查它何时起作用。
还有.cpp文件:
// This is the main DLL file.
#include "stdafx.h"
// #include "Console.h"
namespace Extensions {
void Console::Write(std::string text)
{
std::cout << text.c_str();
}
}
我已经检查过了,它被设置为生成一个动态链接库。
谢谢。
【问题讨论】:
-
为什么 // #include "Console.h" 被注释掉了?那怎么编译?
-
它是“stdafx.h”中的#include'd。将其特别包含在“Console.cpp”中会导致“定义两次”错误。
标签: c++ visual-studio-2010 .lib