首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从静态链接库导出函数的Dll符号

从静态链接库导出函数的Dll符号
EN

Stack Overflow用户
提问于 2018-03-30 21:38:29
回答 1查看 1.2K关注 0票数 0

我正在Dll中包装一个静态库,以隐藏许多实现内容,因为只需要4-5个函数,并且避免提供所有第三方库和许多头文件。在从静态库导出函数到dll时,我似乎遇到了问题。静态库具有与下面类似的设置类/结构。

代码语言:javascript
复制
struct FooSettings
{
   bool Read(const std::string& file); // implemented in .cpp
   bool Write(const std::string& file); // implemented in .cpp
   // rest members, just plain types
};

在Dll侧

代码语言:javascript
复制
#include "FooSettings.h"

#if defined(WIN32) || defined(_WIN32)
    #if defined(LIB_EXPORT)
        // DLL Build, exporting symbols
        #define LIB_API __declspec(dllexport)
    #elif LIB_IMPORT
        // DLL use, importing symbols
        #define LIB_API __declspec(dllimport)
    #endif
#endif

#ifndef LIB_API
    #define LIB_API
#endif

class LIB_API LibSDK
{
public:
    LibSDK();
    ~LibSDK();

    FooSettings get() const noexcept;
    void set(const FooSettings& settings) const noexcept;

    void dummy() 
    {
        foo.Read("");
    }

private:
    // etc...
};

我可以在“客户端”调用dummy(),没有任何问题,但是下面的代码会导致未解决的符号。

代码语言:javascript
复制
FooSettings foo;
foo.Read("");

我原以为FooSettings:Read至少是导出的,因为它是一个虚拟函数的一部分。我漏掉了什么吗?我喜欢在没有虚拟功能的情况下导出它,但我似乎无法让它以任何方式工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-17 04:09:28

回到这一切,答案实际上是#在静态库构建中定义LIB_EXPORT,这是我没有想到的。

我不认为静态.lib文件需要这样的东西,因为它们只是一捆对象文件,所以它们不需要被标记为导出。显然,如果要将函数从静态库导出到包装器dll,则需要这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49581761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档