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

时间:2018-03-30 21:38:30

标签: c++ dll dllexport

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

final

在Dll方面

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
};

我可以在"客户端"上拨打#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()

我原本期望FooSettings:Read至少被导出,因为它是虚函数的一部分。我错过了什么吗?我的偏好是在没有虚函数的情况下导出它,但我似乎无法使其工作。

1 个答案:

答案 0 :(得分:0)

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

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