gpt4 book ai didi

ios - iPhone 静态库 Clang/LLVM 错误 : non_lazy_symbol_pointers

转载 作者:行者123 更新时间:2023-11-28 20:38:04 26 4
gpt4 key购买 nike

经过几个小时的实验,我设法将问题简化为以下示例 (C++):

extern "C" void foo();

struct test
{
~test() { }
};

void doTest()
{
test t; // 1
foo(); // 2
}

这是在 XCode 4.2 中为 iOS 设备编译的,使用提供的 Clang 编译器(Apple LLVM 编译器 3.0)和 iOS 5.0 SDK。该项目配置为 Cocoa Touch 静态库,并且“启用与共享库的链接”设置为否,因为我正在构建 AIR native 扩展。函数 foo 在另一个外部库中定义。 (在我的实际项目中,这将是 Adob​​e 定义的用于 AIR native 扩展的任何 C API 函数。)

尝试编译这段代码时,我得到了错误:

FATAL:incompatible feature used: section type non_lazy_symbol_pointers (must specify "-dynamic" to be used)
clang: error: assembler command failed with exit code 1 (use -v to see invocation)

如果我注释掉上面标记为 12 的行,或者如果我将build设置“Enable Linking With Shared Libraries”更改为是的。 (但是,如果我更改build设置,则在将库链接到最终项目时会收到​​多个 ld warning: unexpected srelocation type 9 警告,并且应用程序在设备上运行时会崩溃。)如果我从 test 中删除析构函数,构建错误也会消失。

所以:这是 Clang 中的错误吗?我是否遗漏了一些非常重要且未记录的build设置?至少可以说,外部提供的函数与具有析构函数的结构之间的交互是非常奇特的。

最佳答案

经过大量搜索,我终于偶然发现了 Richard Lord 的 excellent blog post on AIR native extensions .事实证明,有效的开发需要使用一些 Adob​​e 尚未费心记录的标志(除非您将开发人员博客文章算作文档——我不这样做)。

长话短说:

  • 将“启用与共享库的链接”设置为"is"。将此设置为否是关于开发 AIR native 扩展的最普遍的错误建议。
  • 使用ADT的-platformsdk选项指向Apple提供的iOS SDK(例如:-platformsdk/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk )。这将减轻 unexpected srelocation type 9 警告。 Adobe 的文档指出 -platformsdk 仅适用于 Android,但这是一个谎言。
  • 打包扩展时(即构建 ANE 文件时),使用未记录的 -platformoptions 选项指定包含附加链接器参数的 xml 文件。此 XML 文件的格式也未记录,但可以在 templates/extensions/ios/platform-descriptor-template.xml 下的 AIR SDK 目录中找到模板。在同一位置还有一个 xsd 模式。此文件允许您指定您的扩展程序使用的任何其他框架,因此您不会受限于 AIR SDK 支持的默认框架。
  • 预计会看到一个新的链接器警告:ld: warning: ARM function not 4-byte aligned。这显然可以被安全地忽略。据报道,Adobe 已经意识到了这个问题。我想您可以通过将 -w 传递给 platformoptions 文件中的链接器来消除此警告,但请注意 -w 会消除所有警告,不仅仅是那个。

更多信息可以在 Adob​​e 工程师之一 Rajorshi Ghosh 的这两篇博文中找到:

这仍然不能解释“启用与共享库的链接”、外部定义的函数和析构函数之间奇怪的交互,但现在这已简化为一个好奇的问题,而不是一个阻塞问题。

关于ios - iPhone 静态库 Clang/LLVM 错误 : non_lazy_symbol_pointers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713567/

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