我是 Linux、Windows 和 osX 上的 c++ 库的开发人员。由于 osX 现在不能正确处理匿名异常,我考虑清楚地标记需要导出的符号。按照这些解释,我定义了两个宏:FOO_API
和FOO_LOCAL
用于标记符号。现在我有以下问题:
我在自己的文件中定义每个类(因为我不想要 1000 多个长文件)。如果类A
只在我的库中使用,那么用 . 标记它是有意义的FOO_LOCAL
。但是如果 classB
有一个私有成员 type A
,而 class B
is FOO_API
,那么我会收到编译器警告并且链接失败(找不到符号)。这似乎违背了这些出口属性的全部意义。那么,它应该是什么?我用类似这样的东西来标记我的班级class FOO_LOCAL A {...}
是这样吗?
还有没有办法让所有私人成员都在本地?(因为它们是私有的,所以不应该直接访问它们)这将使标记过程不那么乏味......
最后,当我标记例如我的异常类时,它可以正确编译和运行,但显示符号 ( nm -C -D my_lib.so
) 表明所有符号仍然存在......