如何将“.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 - 库。我不知道如何在这一点上进行调试,但这是否得到支持?
答案 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中设置它。