簡體   English   中英

編譯時動態鏈接庫不生成.lib文件(Visual Studio C ++ Express)

[英]Dynamic link library does not generate a .lib file when compiled (Visual Studio C++ Express)

作為學習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);
    };
}

我不確定在標記類時是否需要標記函數,但是我可以在它工作時檢查它。

和.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的項目中將其保留為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;
}

有關更多詳細信息,請查看有關codeproject的這篇文章。 HowTo:從DLL導出C ++類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM