【发布时间】:2012-03-15 03:26:01
【问题描述】:
经过几个小时的实验,我设法将问题简化为以下示例 (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 本机扩展。函数foo 在另一个外部库中定义。 (在我的实际项目中,这将是 Adobe 定义的用于 AIR 原生扩展的任何 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)
如果我注释掉上面标记为1 或2 的行,或者如果我将构建设置“启用与共享库的链接”更改为“是”,错误就会消失。 (但是,如果我更改构建设置,则在将库链接到最终项目时会收到多个 ld warning: unexpected srelocation type 9 警告,并且应用程序在设备上运行时会崩溃。)如果我从中删除析构函数,构建错误也会消失test.
那么:这是 Clang 中的错误吗?我是否错过了一些非常重要且未记录的构建设置?至少可以说,外部提供的函数和带有析构函数的结构之间的交互非常奇特。
【问题讨论】:
标签: ios xcode air static-libraries clang