c++ - C++ 共享库中未导出的类

标签 c++ qt

我对在 Qt 中创建共享库有点困惑,实际上是在 C++ 中,我的问题中没有 Qt 特定问题。这是一个场景。

这是我的共享库的全局 header 。

#if defined(MYAPI_LIBRARY)
#  define MYAPI Q_DECL_EXPORT
#else
#  define MYAPI Q_DECL_IMPORT
#endif

这是一个导出类。

#include "myapi_global.h"
#include "MyClass2.h"
#include "MyClass3.h"
#include "myfuncs.h"

class MYAPI MyClass1
{
...
public:
    MyClass2 myClass2;
private:
    MyClass3 myClass3;
};

这是 MyClass1 使用的未导出类

class MyClass3
{
..
}

这是 MyClass1 使用的另一个未导出的类

class MyClass2
{
..
}

最后一个非分类函数的头文件 (myfuncs.h)。

int foo() {...}

我的问题是:

  1. 我的 MyClass2、MyClass3 和 foo() 是否对共享库的用户可见?用户可以使用它们吗?如果是,那么 MYAPI 关键字似乎没有意义。
  2. 在C++中创建共享库的模式是否有错误?

最佳答案

默认情况下是否导出符号取决于编译器。 在 MSVC 中,默认情况下不导出任何符号。在 MSVC 下,只有 MyClass1 应该对 DLL 的外部用户可见。在 GCC 中,默认情况下会导出所有符号。

据我所知,您的代码看起来非常好。

关于c++ - C++ 共享库中未导出的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22049088/

相关文章:

c++ - 使用内联链接在定义冲突时生成错误

c++ - Qt 为未找到的 Windows 应用程序 .rc 文件设置应用程序图标

windows - 带有 QT 的 OpenCV 2.4.2

c++ - Qt 应用程序意外的 LanguageChange 事件

c++ - 为什么 "0xe+1"无法编译?

c++ - 使用派生类时出现 Qt 运行时错误

c++ - 我是否错误地传递了这个二维数组?

c++ - 基于 Boost.ASIO 的 HTTP 客户端库(如 libcurl)

c++ - 由于数据类型在运行时变化而停留在设计上

android - Qt:未找到应用程序 .pro 文件,未构建 APK