【问题标题】:Including a framework without embedding it in the app bundle包含一个框架而不将其嵌入到应用程序包中
【发布时间】:2011-12-06 23:31:48
【问题描述】:

我仍然不能 100% 确定框架链接过程,但是从我在这里看到的情况来看,之前没有人问过类似的问题,也许是因为这可能是一个愚蠢的问题,但我会试一试无论如何。

在我当前的 X-Code 项目中,我使用的是自定义框架,例如 example.framework。目前,据我所知,为了让程序与框架一起运行,我需要将它放在 /Library/Frameworks 中,或者我需要将它复制到构建中的捆绑资源中阶段。

有人知道如何将框架添加到项目中以将其编译为可执行文件,这样我就不必在应用程序中包含原始框架吗?我宁愿不分享整个框架...

提前感谢您!也欢迎任何建议!

【问题讨论】:

  • 听起来你真正需要链接的是一个静态库。这对你来说是一个选择吗? “框架”基本上是动态库的一个花哨的名称。
  • 当然,我想是的。唯一的问题是框架也在其中使用了一个包。理想情况下,我想将包的可执行文件和框架的可执行文件编译到我的可执行文件中,而不是同时包含框架和包,并带有清晰的标头......你对从哪里开始有什么建议吗?跨度>

标签: xcode macos frameworks


【解决方案1】:

Mac OS X 框架基本上是一个共享库,这意味着它是一个单独的二进制文件。

基本上,当您的主可执行文件启动时,操作系统会将框架/dylib 加载到内存中,并映射符号,以便您的主可执行文件可以访问它们。

请注意,framework/dylib(是否绑定到应用程序中)不需要包含头文件,因为它们仅在编译时需要。

使用 Xcode,当您将框架复制到其安装目录时,您实际上可以决定是否包含头文件(请参阅您的构建阶段)。

如果您不复制头文件,人们将无法使用您的框架/dylib(当然,除非他们对其进行逆向工程)。

如果您仍然认为框架不适合您的需求,您可能需要创建一个静态库。

静态库是一个单独的对象文件(通常是 .a),它在链接时“包含”在您的最终二进制文件中。

这样,您只有一个二进制文件,其中包含库和项目中的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2018-11-29
    • 1970-01-01
    相关资源
    最近更新 更多