gpt4 book ai didi

visual-studio-2010 - 静态库中的隐藏函数

转载 作者:行者123 更新时间:2023-12-04 19:13:07 25 4
gpt4 key购买 nike

我在建 .lib ( 静态库 )用于大型项目,我想向库的最终用户隐藏一些函数,但我需要这些函数可以从每个 .c 调用库中的文件(因此不是静态的)。

这与 __declspec(dllexport) 正好相反我已经为 gcc 找到了解决方案.

我想用 static , 但静态函数 should be仅在“当前 .c 文件”中可用,所以这不是方法。

换句话说 :我需要一种方法如何告诉 Microsoft Visual C++ 2010 不要将某些函数导出到最终 .lib (同时保持它们可用于项目内的所有其他 .c 文件)。

注意:我从来没有用过 __declspec (都不是 __attribute__( visibility) )在我的整个解决方案中,这可能只是与构建静态库(我无法追踪)相关的一些默认设置。

最佳答案

这是不可能的。您所要求的与 __declspec(dllexport) 无关,这是一个属性,用于确定哪些标识符在 DLL 之外可见。这肯定会满足您的要求。

但是您要求的是静态库。这是一种非常简单的文件格式,它只是一袋 .obj 文件。编译后通过lib.exe 一起归档。解决 .lib 中单独编译的 .c 文件之间的依赖关系根本没有任何 react 。在 .lib 链接之前不会发生这种情况。

此时,客户端代码使用的具有外部链接的标识符与您的标识符之间完全没有区别。如果可能的话,试图隐藏你的文件只会在链接器无法弄清楚如何满足一个 .c 文件与另一个文件的外部依赖关系时导致链接失败。

接近任何地方的唯一方法是将所有代码放在一个翻译单元中,函数标记为静态,因此它们没有外部链接。这非常丑陋,但可以通过#includes 所有其他 .c 文件的单个文件来完成。你肯定会拒绝这个选项,所以一定要寻求一个 DLL 解决方案来解决这个问题。

关于visual-studio-2010 - 静态库中的隐藏函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13029038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com