我有隐藏在xcode 4.6中的符号的轻微问题或误解。我在网上到处搜索,找不到任何具有相同问题的帖子。xcode 4.6符号可见性
目前,我已经创建了一个框架项目包含这样一个简单的头文件:
class Test
{
public:
Test(){}
Test(){}
};
int a(int n) {return n;}
__attribute__((visibility("hidden"))) int b(int n) {return n;}
__attribute__((visibility("default"))) int c(int n) {return n;}
class X
{
public:
virtual ~X();
};
class __attribute__((visibility("hidden"))) Y
{
public:
virtual ~Y();
};
class __attribute__((visibility("default"))) Z
{
public:
virtual ~Z();
};
X::~X() { }
Y::~Y() { }
Z::~Z() { }
在项目设置中我已确保“符号默认是隐藏的”切换到YES,因此只有功能int c和类z将被导出或对其他项目可见。
我构建的框架没有错误或警告,然后复制/添加到可可应用程序进行测试。
我能够包含头文件,但我仍然能够访问所有类和函数。
我希望有人能解释我为什么或在哪里出错或者之前遇到过这个问题?
问候
感谢梅克,当然,我是完全愚蠢的(脑筋被炸,但没有借口)。我想我对[这个苹果页面](https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html)感到困惑,因为它展示了一个例子,我虽然是在一个头文件中,或者正在演示如何放置__attribute __((visibility(“default”)))或其他。 那么如果内联函数int add例如它会隐藏正确? – themadme 2013-02-19 13:46:58
如果您声明了函数'inline',但仍将其放入标题中,则无论标题包含在何处,它都将仍然可见。如果你想让一个函数在你的库之外不可见,那么声明它为'hidden',并确保它不出现在你的框架包的任何头文件中。只需使用私有H文件,该文件仅对框架文件可见,但不能复制到框架束,因此对于链接到您的框架的项目不可见。 – Mecki 2013-02-19 14:00:10
再次感谢你的智慧麦基。现在我无法等待回家,并继续将我的Windows项目转换为Mac,并希望Linux。 再次感谢。 – themadme 2013-02-19 14:16:56