gpt4 book ai didi

c++ - 编译时动态链接库不生成 .lib 文件(Visual Studio C++ Express)

转载 作者:IT老高 更新时间:2023-10-28 12:37:45 25 4
gpt4 key购买 nike

作为学习 C++ 的一部分,我编写了一个简单的类库 + 引用它的应用程序。一切都会构建,除了类库不生成 .lib 文件,这会导致应用程序抛出“LINK: fatal error 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();
}
}

我已经检查过了,它被设置为生成一个动态链接库。

谢谢。

最佳答案

这里是一些示例代码,演示了如何正确导出类。注意 CONSOLETEST_EXPORT 宏。这是您的解决方案中缺少的部分。您需要在您的 DLL 项目中定义此宏,并在引用此 dll 的项目中保持未定义。

// MAIN.CPP - TestApplication

#include <iostream>
#include "ConsoleTest.h"

int main(int argc, char** argv)
{
std::cout << "Hello World" << std::endl;

ConsoleTest test;

test.Write();
ConsoleTest::StaticWrite();

system("pause");
}


// ConsoleTest.h - TestDll

#include <iostream>

#ifdef CONSOLETEST_EXPORT
#define CONSOLETEST_API __declspec(dllexport)
#else
#define CONSOLETEST_API __declspec(dllimport)
#endif

class CONSOLETEST_API ConsoleTest
{
public:
ConsoleTest();
~ConsoleTest();
void Write();
static void StaticWrite();
};


// ConsoleTest.cpp - TestDll

#include "ConsoleTest.h"

ConsoleTest::ConsoleTest()
{
}

ConsoleTest::~ConsoleTest()
{
}

void ConsoleTest::Write()
{
std::cout << "Instance Write" << std::endl;
}

void ConsoleTest::StaticWrite()
{
std::cout << "Static Write" << std::endl;
}

查看这篇关于 codeproject 的文章了解更多详情。 HowTo: Export C++ classes from a DLL

关于c++ - 编译时动态链接库不生成 .lib 文件(Visual Studio C++ Express),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5019809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com