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

时间:2009-08-11 16:44:02

标签: c++ linker shared-libraries

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

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

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

在VC ++中: __declspec(dllexport)的

谢谢!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

仅用于访问规范时的private关键字 在编译时有效工作,旨在帮助程序员,而不是安全功能 - 因为你发现“隐私”已经实现 使用词汇手段。

很容易看出这必须如此 - 如果在两个单独的.cpp文件中实现两个具有相互依赖关系的私有函数,链接器必须在生成的对象(或库)文件中找到私有名称。 / p>

底线 - C ++没有代码安全功能 - 如果你给某人一个程序的目标代码,他们总是可以检查它。