我对在 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() {...}
我的问题是:
- 我的 MyClass2、MyClass3 和 foo() 是否对共享库的用户可见?用户可以使用它们吗?如果是,那么 MYAPI 关键字似乎没有意义。
- 在C++中创建共享库的模式是否有错误?
最佳答案
默认情况下是否导出符号取决于编译器。 在 MSVC 中,默认情况下不导出任何符号。在 MSVC 下,只有 MyClass1 应该对 DLL 的外部用户可见。在 GCC 中,默认情况下会导出所有符号。
据我所知,您的代码看起来非常好。
关于c++ - C++ 共享库中未导出的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22049088/