gpt4 book ai didi

c++ - Xcode - 包太大

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:56:14 26 4
gpt4 key购买 nike

我有一个 C++ 项目,它是一个动态库。当我在 Windows (Visual Studio 2012) 上编译它时,它的 300 kB 很大。但是当我在 Mac 上使用 XCode 编译它时,它在包中有 3.9 MB 二进制文件。

我选择了优化级别 Fastest, Smallest [-Os] 选项。

调试符号也被关闭。

项目是一样的,唯一的额外框架是Cocoa.framework,我需要它来成功编译项目。 Cocoa.framework 能链接这么多吗?

这是一些糟糕的链接器的工作吗?

我可以用 LLVM GCC 4.2 或 Apple LLVM Compiler 4.2 编译它,大小是一样的。

关于如何减小 .bundle 大小的任何想法?

最佳答案

我猜这是由于从您的项目中导出的符号而发生的。我们在这里不是在谈论调试符号,而是每个类、方法、构造函数、异常处理程序展开段等的符号表条目。后一类在使用异常和标准库的项目中占了很多。

如果您使用的是 STL、boost 或其他任何带有大量模板的东西,您还将拥有与它们一起使用的每种类型的特化(通常是整个类——而不仅仅是方法),并且链接较弱。符号名称的长度随着模板扩展和参数类型的 C++ 名称重整而变大。

编译 Windows DLL 时,必须显式导出符号 - 使用编译器指令(通常使用 DLLExport 宏)或链接器符号导出列表。

在 MacOSX 和基于 ELF 的 *NIX 系统上,情况正好相反:默认情况下它们都是导出的。链接器无法知道模块可能链接到什么,因此也不知道哪些有用或无用。实际上,应用程序通常只真正需要导出 main 和任何未解析的符号。

标记为private 的C++ 类成员也没有区别。你也得到了这些的符号。

reference来自 Apple 的 描述了如何限制符号的可见性。您当然曾经能够使用 gcc 执行此操作 - 但快速查看 clang 的等效项表明它在那里没有得到很好的支持。

关于c++ - Xcode - 包太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18396974/

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