c++ - 用于从共享库中导出类的头文件
问题描述
我已经构建了一个包含多个类的共享库(.so)。我现在需要创建用于将这些类导入另一个应用程序的头文件。一些导出的类具有私有数据/功能。这些是否需要包含在该头文件中?
例如:
orig.h(用于构建库的标头)
#ifndef __MYLIB__
#define __MYLIB__
// system includes here
#ifdef __cplusplus
extern "C" {
#endif
namespace myspace{
// my includes
#include "..."
#ifndef EXPORT_API
#define EXPORT_API __attribute__((__visability__("default")))
#endif
class EXPORT_API MyClass1 {
public:
MyClass1();
virtual ~MyClass1();
public:
... // public members
protected:
... // protected members
private: // private members
... // these should not be visible outside of the lib
};
} //namespace
#ifdef __cplusplus
}
#endif
#endif // __MYLIB__
这构建好了。
lib用户用来构建他们的应用程序的exp.h
#ifndef __MYLIB__
#define __MYLIB__
// system includes here
#ifdef __cplusplus
extern "C" {
#endif
namespace myspace{
class MyClass1 {
public:
MyClass1();
virtual ~MyClass1();
public:
... // public members
protected:
... // protected members
// no private members listed here.
};
} //namespace
#ifdef __cplusplus
}
#endif
#endif //__MYLIB__
在我的 userapp.h 中:
#ifndef __MYUSER__
#endif
#include <...> //system includes
#ifdef __cplusplus
extern "C" {
#endif
#include "exp.h"
//derived class
class MyClass2 : public MyClass1 {
public:
MyClass2();
~virtual MyClass2();
public:
// derived class members
myclass2_func();
int m_myclass2int;
};
在 main.cpp 中:#include "userapp.h"
using myspace;
int main(int *argc, char** argv){
MyClass2 theClass;
// make member calls to theClass
theClass.myclass2_func();
theClass.m_myclass2int = 0;
return 0;
}
这也很好。
但是当我调试 userapp 时,内存被破坏了,很可能是由于错误的指针。这通常是当我单步执行派生类函数(例如 myclass2_func)时,我会遇到分段错误(内存访问冲突),或者有时 gdb 本身会崩溃(尝试显示值时)。我猜这与我没有在 exp.h 中指定的 lib 中的私有部分有关。
那么回到最初的问题:这些私有部分是否需要包含在导入头文件中?
TIA
肯
解决方案
推荐阅读
- css - Bootstrap 4在单选按钮下方对齐标签
- android - 如何将图像从一项活动发送到从图库中获取的另一项活动?
- javascript - 表大小不应在第一次初始加载后调整大小
- uml - UML 概要文件中扩展构造型的约束
- javascript - 不同文件中的继承类父“this”导致未定义
- javascript - 将页面存储到 puppeteer 中的变量不起作用
- leanback - 从电视倾斜中的 RowsSupportFragment 开始填充
- java - 通过写入文件处理统计信息
- elasticsearch - 获取此根映射定义具有不受支持的参数:在 Kibana 控制台中运行以下查询时的 mapper_parsing_exception
- amazon-web-services - AWS:如何查明是否有人在尝试挂载卷或复制 EBS 卷