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

时间:2013-09-01 03:10:17

标签: apportable

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

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

  

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

我确实将其添加到了JSON右侧的“deps”中:

  

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

我的图书馆不是一个框架。它只是一个.a静态库,包含armv7,armv7s和i386部分,我使用lipo从两个库(armv7和armv7s .a和i386 .a)汇编而成用Xcode构建。他们都使用this Boost framework的单个框架。

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

现在我知道Apportable必须re-jitter所有这些东西,因为Android不知道如何处理Mac可执行格式,所以它可能需要拆开我的库并可能将其转换为最终链接前的ELF - 库。我不知道如何在这一点上进行调试,但这是否得到支持?

1 个答案:

答案 0 :(得分:2)

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

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

您应该尝试的第一步是确保设置目标依赖项。选择应用目标,转到构建阶段窗格,然后在目标依赖项下添加列表中显示的项目所依赖的所有框架和库。这应确保构建依赖框架/库 - 因为Xcode的内置自动依赖性解析不能用于我所理解的命令行工具。因此,您需要分别明确指定依赖项目的输出。

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

这种方式甚至依赖其他项目将其输出放在同一个文件夹中,xcodebuild以及Apportable(它依赖于xcodebuild)将能够找到库文件。

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

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

xcodebuild SYMROOT=~/myprojectsbuildoutput

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