1

如何将“.a”fat-static-libs 与 Apportable 链接?

一开始,我确实收到了警告,

警告:找不到库名称的库。尝试将此添加到 configuration.json 文件的“add_params”部分中的“deps”数组中。检查 ~/.apportable/SDK/System 以获取与“deps”条目对应的目录名称。

我确实将它添加到JSON中的“deps”中,它是这样说的:

// 依赖项列表。通常这些对应于 xcode 项目中的框架。

不过,我的库不是框架。它只是一个.a包含 armv7、armv7s 和 i386 部件的静态库,我使用Xcodelipo构建的两个库(一个 armv7 和 armv7s.a以及一个 i386 .a)组装这些部件。他们都使用一个单一的框架,即这个 Boost framework

在下添加它会deps抑制该警告消息,但apportable链接器仍然给出未定义的引用,因此它仍然没有正确链接该文件。

现在我知道 Apportable 必须重新调整所有这些东西,因为 Android 不知道如何处理 Mac 可执行格式,所以它可能必须拆开我的库并可能将它变成ELF -library 之前最终链接。我不确定此时如何进行调试,但这是否受支持?

4

1 回答 1

2

由于您收到“找不到库”,这意味着 Apportable 根本无法找到该文件。因此,问题仅在于文件的位置(或存在),而不是库中的内容或构建方式。

依赖目标最常见的问题,尤其是 Xcode 项目分别放入其他 Xcode 项目和多个项目的工作区,是每个目标/项目的结果输出到不同的文件夹。然后 Apportable(以及某些情况下的 xcodebuild)找不到生成的库。

您应该尝试的第一步是确保设置了目标依赖项。选择应用程序目标,转到Build Phases窗格,然后在Target Dependencies下添加列表中显示的所有框架和库以及您的项目所依赖的所有框架和库。这应该确保确实构建了依赖的框架/库 - 因为据我所知,命令行工具无法使用 Xcode 的内置自动依赖解析。因此,您需要分别明确指定依赖项目的输出。

如果这没有帮助,您可以强制所有目标将其输出写入同一文件夹。例如,在每个目标的构建设置下,将构建产品路径(符号名称:SYMROOT)更改为相同的文件夹~/myprojectsbuildoutput

这样,即使依赖的其他项目也会将它们的输出放在同一个文件夹中,并且 xcodebuild 和 Apportable(它取决于 xcodebuild)将能够找到库文件。

提示:确保您的项目在命令行上成功构建。打开终端,cd进入 .xcodeproj 包所在的文件夹,然后输入xcodebuild. 如果 xcodebuild 仅由于验证而失败,请在应用程序目标的Build Settings下禁用Validate Built Product 。如果 xcodebuild 失败,Apportable 可能也不会工作,因为它依赖于 xcodebuild。因此,作为先决条件,请确保 xcodebuild 适用于您的项目。

如果 xcodebuild 还给您“找不到库”,请尝试使用特定的 SYMROOT 调用它:

xcodebuild SYMROOT=~/myprojectsbuildoutput

如果那样的话,你知道你必须更新每个目标的Build Projects Path. 据我所知,目前无法(或没有记录)通过 Apportable 传递自定义 xcodebuild 参数,因此需要在 .xcodeproj 本身中进行设置。

于 2013-09-01T09:27:54.137 回答