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

Nar*_*use 33 c++ visual-studio-2010 .lib

作为学习C++的一部分,我编写了一个引用它的简单类库+应用程序.所有内容都构建,除了类库不生成.lib文件,这导致应用程序抛出"LINK:致命错误LNK1104:无法打开文件".这似乎很合理; 很明显,如果没有必要的文件,则会出现错误,这是致命的.(旁注:我还没有书)

所以,我去寻找可能无法生成.lib文件的原因.顺便说一句,我的搜索功能相当薄弱.我所做的就是,如果库没有任何__declspec(dllexport)标签,它就不会导出.lib.

我现在将发布类库的头文件和.cpp内容(一个简单的"Console"类,带有一个"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);
    };
}
Run Code Online (Sandbox Code Playgroud)

我不确定在标记类时是否需要标记函数,但是我可以在它工作时检查它.

和.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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Nat*_*ael 25

下面是一些示例代码,演示如何正确导出类.注意CONSOLETEST_EXPORT宏.这是解决方案中缺少的部分.您需要在DLL项目中定义此宏,并在引用此dll的项目中将其保留为undefined.

// 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;
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看有关codeproject的这篇文章. HowTo:从DLL导出C++类