C ++共享库显示内部符号

我用VC ++ 2008和GCC构建了一个共享库(.dll,.so)。 问题是在这两个库中它显示私有符号(类,函数)的名称,并且它们未被导出。

我不希望我的应用程序显示未导出的类/函数的名称。 有什么办法可以做到吗?

在GCC中,我做了:用-fvisibility = hidden编译,然后通过属性 ((visibility(“default”))公开)

在VC ++中:__declspec(dllexport)

谢谢!


对于GNU工具链,您可以使用th strip命令从对象文件中删除符号。 它需要各种命令选项来控制其行为。 它可以做你想做的事。


您可以创建一个头文件来混淆要隐藏的内部函数和方法名称。 即像下面的东西(需要一些包括警卫)

#define someFunctionName1 sJkahe28273jwknd
#define someFunctionName2 lSKlajdwe98
#define someMethodName1   ksdKLJLKJl22fss
#define someMethodName2   lsk89hHHuhu7g

...并将其包含在真实定义所在的头文件中。


当用于访问规范时,private关键字仅在编译时有效地起作用,并且旨在帮助程序员,而不是安全功能 - 因为您发现“隐私”是使用词法方式实现的。

很容易看出这一点 - 如果您在两个单独的.cpp文件中实现两个相互依赖的私有函数,那么链接器必须在生成的对象(或库)文件中查找私有名称。

底线 - C ++没有代码安全功能 - 如果您向某人提供程序的目标代码,他们将始终能够检查它。

链接地址: http://www.djcxy.com/p/42609.html

上一篇: C++ shared library shows internal symbols

下一篇: Android ScaleAnimation to Center of Rect